앱 및 서비스에서 섀도우 사용 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

앱 및 서비스에서 섀도우 사용

이 섹션에서는 앱 또는 서비스가 AWS IoT Device Shadow 서비스와 상호 작용하는 방식을 설명합니다. 이 예에서는 앱 또는 서비스가 섀도우만 대상으로 상호 작용하거나 섀도우를 통해 디바이스만 대상으로 상호 작용한다고 가정합니다. 이 예에는 섀도우 생성 또는 삭제와 같은 관리 작업이 포함되지 않습니다.

이 예제에서는 AWS IoT Device Shadow 서비스의 REST API를 사용하여 섀도우와 상호작용합니다. 게시/구독 통신 모델을 사용하는 디바이스에서 섀도우 사용의 예제와 달리, 이 예제에서는 REST API의 요청/응답 통신 모델을 사용합니다. 즉, 앱 또는 서비스가 요청을 해야 응답을 받을 수 있습니다 AWS IoT. 그러나 이 모델의 단점은 알림을 지원하지 않는다는 것입니다. 앱 또는 서비스에서 디바이스 상태 변경에 대한 시기 적절한 알림이 필요한 경우 디바이스에서 섀도우 사용에 설명된 대로 게시/구독 통신 모델을 지원하는 MQTT 또는 MQTT over WSS 프로토콜을 고려하세요.

중요

앱 또는 서비스의 섀도우 사용이 일관되고 디바이스의 해당 구현에 의해 지원되는지 확인합니다. 예를 들어, 섀도우를 생성, 업데이트 및 삭제하는 방법과 디바이스 및 섀도우에 액세스하는 앱 또는 서비스에서 업데이트가 처리되는 방법을 고려합니다. 디바이스의 상태가 업데이트되고 보고되는 방식과 앱 및 서비스가 디바이스 및 섀도우와 상호 작용하는 방식에 대한 설계가 명확해야 합니다.

명명된 섀도우에 대한 REST API의 URL은 다음과 같습니다.

https://endpoint/things/thingName/shadow?name=shadowName

또한 명명되지 않은 섀도우에 대한 REST API의 URL은 다음과 같습니다.

https://endpoint/things/thingName/shadow

여기서 각 항목은 다음과 같습니다.

엔드포인트

CLI 명령에 의해 반환된 엔드포인트는 다음과 같습니다.

aws iot describe-endpoint --endpoint-type IOT:Data-ATS
thingName

섀도우가 속한 사물 객체의 이름입니다.

shadowName

명명된 섀도우의 이름입니다. 이 파라미터는 명명되지 않은 섀도우와 함께 사용되지 않습니다.

연결 시 앱 또는 서비스 초기화 AWS IoT

앱이 처음 연결되면 사용하는 섀도우의 URL에 HTTP GET 요청을 보내 사용 중인 섀도우의 현재 상태를 가져와야 합니다. AWS IoT 이를 통해 앱이나 서비스를 섀도우와 동기화할 수 있습니다.

앱 또는 서비스가 연결된 동안에는 처리 상태가 변경됩니다. AWS IoT

앱 또는 서비스가 연결되어 있는 동안 사용하는 섀도우의 URL에 HTTP GET 요청을 전송하여 현재 상태를 주기적으로 쿼리할 수 있습니다. AWS IoT

최종 사용자가 앱 또는 서비스와 상호 작용하여 디바이스의 상태를 변경하는 경우 앱이나 서비스는 섀도우의 desired 상태를 업데이트하는 데 사용되는 섀도우의 URL로 HTTP POST 요청을 전송할 수 있습니다. 이 요청은 허용된 변경 사항을 반환하지만 디바이스가 새 상태로 섀도우를 업데이트할 때까지 HTTP GET 요청을 만들어 섀도우를 폴링해야 할 수 있습니다.

디바이스 연결 상태 감지

현재 디바이스가 연결되어 있는지 확인하려면 섀도우 문서에 connected 속성을 포함시키고 MQTT LWT(Last Will and Testament) 메시지를 사용하세요. 이 메시지는 디바이스가 오류로 인해 연결 해제될 경우 connected 속성을 false로 설정합니다.

참고

AWS IoT 예약된 주제 ($로 시작하는 주제) 로 전송된 MQTT LWT 메시지는 AWS IoT Device Shadow 서비스에서 무시됩니다. 하지만 구독한 클라이언트와 AWS IoT 규칙 엔진에서 처리되므로 예약되지 않은 주제로 보내는 LWT 메시지와 MQTT LWT 메시지를 섀도우의 예약된 업데이트 주제에 섀도우 업데이트 메시지로 다시 게시하는 규칙을 만들어야 합니다. ShadowTopicPrefix/update

디바이스 섀도우 서비스에 LWT 메시지를 전송하려면
  1. 예약된 주제에 대해 MQTT LWT 메시지를 재게시하는 규칙을 생성합니다. 다음 예는 my/things/myLightBulb/update 주제에 대한 메시지를 수신하고 $aws/things/myLightBulb/shadow/update에 재게시하는 규칙입니다.

    { "rule": { "ruleDisabled": false, "sql": "SELECT * FROM 'my/things/myLightBulb/update'", "description": "Turn my/things/ into $aws/things/", "actions": [ { "republish": { "topic": "$$aws/things/myLightBulb/shadow/update", "roleArn": "arn:aws:iam:123456789012:role/aws_iot_republish" } } ] } }
  2. 에 연결되면 다시 게시 규칙이 인식할 수 있도록 AWS IoT LWT 메시지를 예약되지 않은 주제에 등록합니다. 이 예제에서 해당 주제는 my/things/myLightBulb/update이고 연결된 속성을 false로 설정합니다.

    { "state": { "reported": { "connected":"false" } } }
  3. 연결 후 디바이스는 섀도우 업데이트 주제인 $aws/things/myLightBulb/shadow/update에 메시지를 게시하여 connected 속성을 true로 설정하는 등 현재 상태를 보고합니다.

    { "state": { "reported": { "connected":"true" } } }
  4. 디바이스가 정상적으로 연결 해제되기 전에, 섀도우 업데이트 주제인 $aws/things/myLightBulb/shadow/update에 메시지를 게시하여 connected 속성을 false로 설정하는 등 최신 상태를 보고합니다.

    { "state": { "reported": { "connected":"false" } } }
  5. 오류로 인해 장치 연결이 끊어지면 AWS IoT 메시지 브로커가 장치 대신 장치의 LWT 메시지를 게시합니다. 재게시 규칙은 이 메시지를 감지하고 섀도우 업데이트 메시지를 게시하여 디바이스 섀도우의 connected 속성을 업데이트합니다.