2017-09-04 29 views
0

想與AWS IOT使用Android應用如何獲得Android應用AWS-IOT事情陰影

我在android系統尋求例如用於IOT開始發展。需要在AWS控制檯和Android應用程序上啓動基本配置。我已經測試過溫度演示,但沒有得到任何線索!需要影子,政策,角色的基本步驟。如何逐步配置它們並使用cognito。

下面getshadow()方法被調用onCreate,需要實時更新值ony onCreate而不是ony。

public void getShadows() { 

     GetShadowTask getControlShadowTask = new GetShadowTask("TemperatureControl"); 
     getControlShadowTask.execute(); 
    } 


    private class GetShadowTask extends AsyncTask<Void, Void, AsyncTaskResult<String>> { 

     private final String thingName; 

     public GetShadowTask(String name) { 
      thingName = name; 
     } 

     @Override 
     protected AsyncTaskResult<String> doInBackground(Void... voids) { 
      try { 
       GetThingShadowRequest getThingShadowRequest = new GetThingShadowRequest() 
         .withThingName(thingName); 
       GetThingShadowResult result = iotDataClient.getThingShadow(getThingShadowRequest); 
//    Toast.makeText(getApplication(),result.getPayload().remaining(),Toast.LENGTH_LONG).show(); 
       byte[] bytes = new byte[result.getPayload().remaining()]; 
       result.getPayload().get(bytes); 
       String resultString = new String(bytes); 
       return new AsyncTaskResult<String>(resultString); 
      } catch (Exception e) { 

       Log.e("E", "getShadowTask", e); 
       return new AsyncTaskResult<String>(e); 
      } 
     } 

     @Override 
     protected void onPostExecute(AsyncTaskResult<String> result) { 
      if (result.getError() == null) { 
       JsonParser parser=new JsonParser(); 
       JsonObject jsonObject= (JsonObject) parser.parse(result.getResult()); 
response=result.getResult(); 
     setPoint=jsonObject.getAsJsonObject("state").getAsJsonObject("reported") 
       .get("current_date").getAsString(); 
textView.setText(setPoint); 
      //  Toast.makeText(getApplication(),setPoint,Toast.LENGTH_LONG).show(); 
       Log.i(GetShadowTask.class.getCanonicalName(), result.getResult()); 

      } else { 
       Log.e(GetShadowTask.class.getCanonicalName(), "getShadowTask", result.getError()); 
       Toast.makeText(getApplication(),result.getError().toString(),Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

UPDATE

事情暗影

{ 「期望」:{ 「歡迎」: 「AWS-IOT」 }, 「報道」:{ 「歡迎「:」aws-iot「, 」current_date「:」06-Sep-2017 1:26:40 PM「 } }

回答

0

AWS已經提供了完整的Android樣本Github repo。在示例中,執行PubSubWebSocket以連接,訂閱並將數據發佈到影子。

如果您仔細查看PubSubWebSocket示例,可以找到有關如何制定事物策略和角色的詳細信息。它不可能比這更簡潔明瞭。

要了解和使用Cognito,請按照AmazonCognitoAuthDemo示例製作標識池並在PubSubWebSocket示例中使用它。

爲了更好地理解角色和Cognito。請閱讀AWS文檔。

更新: 在物聯網物聯網政策中,您是否給予了適當的連接,訂閱和發佈權限。該選項可以在AWS IoT-> Security-> Policy-> Create Policy中找到。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": "iot:*", 
     "Resource": "arn:aws:iot:us-east-2:293751794947:topic/replaceWithATopic" 
    } 
    ] 
} 

上述政策給予用戶所有權限。另外,請確保您創建的池用於未經身份驗證的用戶。

爲了得到更改陰影類型樣品的Android以下(WebSocketAwsPubSub)編輯框中$aws/things/thing_name/shadow/update/accepted

,並將數據發佈到陰影類型$aws/things/thing_name/shadow/update

更新2: 的Android代碼您將在哪裏收到報告的消息。它適用於該設備。它是PubSubWebSocketSample片段的副本。

public void AwsSubscribe(){ 
    final String topic = "$aws/things/D1/shadow/update/accepted"; 

Log.d(LOG_TAG, "topic = " + topic); 

try { 
    mqttManager.subscribeToTopic(topic, AWSIotMqttQos.QOS0, 
      new AWSIotMqttNewMessageCallback() { 
       @Override 
       public void onMessageArrived(final String topic, final byte[] data) { 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          try { 
           String message = new String(data, "UTF-8"); 
           Log.d(LOG_TAG, "Message arrived:"); 
           Log.d(LOG_TAG, " Topic: " + topic); 
           Log.d(LOG_TAG, " Message: " + message); 

           tvLastMessage.setText(message); 

          } catch (UnsupportedEncodingException e) { 
           Log.e(LOG_TAG, "Message encoding error.", e); 
          } 
         } 
        }); 
       } 
      }); 
} catch (Exception e) { 
    Log.e(LOG_TAG, "Subscription error.", e); 
} 

}

+0

遐我試過了榜樣!但我堅持如何創建主題,訂閱該主題,並在陰影發生實時變化時接收更改。如果你已經在IOT上開發了一些基本的東西,請給我一些資源來逐步瞭解它。 –

+0

如果陰影發生變化,您將自動接收應用程序中的更改。頭在這裏詳細瞭解https://stackoverflow.com/questions/44113956/aws-iot-login-from-android-mqtt-client-using-iam-is-not-working/45993988#45993988 –

+0

如果可能請給我提供片段。根據我的研究,從影子獲取實時更新需要定義觸發更新的規則。 –