2017-09-04 5 views
0

는 AWS IOT 내가 안드로이드에 IOT를 위해 예를 들어 추구하고안드로이드 응용 프로그램에 AWS-IOT 것은 그림자를 얻을하는 방법

안드로이드 응용 프로그램을 사용하여 개발을 시작하고 싶어. AWS 콘솔 및 Android 앱에서 기본 구성을 시작해야합니다. 이미 온도 데모를 테스트했지만 그로부터 단서를 얻지 못했습니다! 그림자, 정책, 역할에 대한 기본 단계가 필요합니다. 어떻게 그들을 단계별로 구성하고 Cognito를 사용하는지 설명합니다.

아래의 getshadow() 메소드는 onCreate라고하며, ony onCreate가 아닌 실시간으로 값을 업데이트해야합니다.

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는 완전한 Github repo 개의 Android 샘플을 제공합니다. 샘플에서는 PubSubWebSocket을 사용하여 데이터를 연결하고 구독하고 그림자에 게시합니다.

PubSubWebSocket 예제를 자세히 살펴보면 정책 및 역할을 만드는 방법에 대한 자세한 정보를 찾을 수 있습니다. 그것보다 더 간결하고 명확 할 수는 없습니다.

Cognito를 이해하고 사용하려면 ID 풀을 만들고 PubSubWebSocket 예제에서 사용하는 예제를 따르십시오.

역할 및 Cognito에 대해 더 잘 이해할 수 있습니다. AWS 설명서를 읽어보십시오.

업데이트 : IoT 물건 정책에서 당신은 연결, 가입 및 게시 할 수있는 적절한 권한을 부여 했습니까? 이 옵션은 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" 
    } 
    ] 
} 

위 정책은 사용자에게 모든 액세스 권한을 부여합니다. 또한 생성 한 풀이 인증되지 않은 사용자 용인지 확인하십시오.

은 (WebSocketAwsPubSub) 편집 상자 $aws/things/thing_name/shadow/update/accepted

그리고 그림자 유형에 데이터를 게시 할 수있는 샘플 안드로이드에 다음을 입력 그림자의 변경 사항을 얻으려면 $aws/things/thing_name/shadow/update

업데이트 2 : 안드로이드 코드 보고 된 메시지를 받게됩니다. 그것의 장치에 suscribing. 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

아 내가 예 것을 시도! 하지만 주제를 만들고, 주제를 구독하고, 그림자가 실시간으로 바뀌면 변경 사항을받는 방법에 집착하고 있습니다.만약 당신이 무언가를 기초로 무언가를 개발했다면 단계별로 이해할 수있는 자료를 제공해주십시오. –

+0

그림자가 변경되면 응용 프로그램의 변경 사항이 자동으로 수신됩니다. 자세한 내용을 보려면 여기로 이동하십시오. https://stackoverflow.com/questions/44113956/aws-iot-login-from-android-mqtt-client-using-iam-is-not-working/45993988#45993988 –

+0

가능한 경우 알려주세요. . 그림자에서 실시간 업데이트를 얻으려는 나의 연구에 따라 업데이트를 트리거하는 규칙을 정의해야합니다. –