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

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

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

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

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

중요

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

명명된 섀도우RESTAPIURL의 는 다음과 같습니다.

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

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

앱 또는 서비스가 에 연결되어 있는 동안 상태 변경 처리 AWS IoT

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

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

디바이스 연결 상태 감지

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

참고

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

Device Shadow 서비스에 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. 디바이스가 에 연결되면 재게시 규칙이 인식할 수 있도록 예약되지 않은 주제에 LWT 메시지를 AWS IoT등록합니다. 이 예제에서 해당 주제는 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 속성을 업데이트합니다.