기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
앱 및 서비스에서 섀도우 사용
이 섹션에서는 앱 또는 서비스가 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 메시지를 보내려면
-
예약된 주제에 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" } } ] } }
-
디바이스가 에 연결되면 재게시 규칙이 인식할 수 있도록 예약되지 않은 주제에 LWT 메시지를 AWS IoT등록합니다. 이 예제에서 해당 주제는
my/things/myLightBulb/update
이고 연결된 속성을false
로 설정합니다.{ "state": { "reported": { "connected":"false" } } }
-
연결 후 디바이스는 섀도우 업데이트 주제인
$aws/things/myLightBulb/shadow/update
에 메시지를 게시하여connected
속성을true
로 설정하는 등 현재 상태를 보고합니다.{ "state": { "reported": { "connected":"true" } } }
-
디바이스가 정상적으로 연결 해제되기 전에, 섀도우 업데이트 주제인
$aws/things/myLightBulb/shadow/update
에 메시지를 게시하여connected
속성을false
로 설정하는 등 최신 상태를 보고합니다.{ "state": { "reported": { "connected":"false" } } }
-
오류로 인해 디바이스 연결이 끊어지면 AWS IoT 메시지 브로커가 디바이스를 대신하여 디바이스의 LWT 메시지를 게시합니다. 재게시 규칙은 이 메시지를 감지하고 섀도우 업데이트 메시지를 게시하여 디바이스 섀도우의
connected
속성을 업데이트합니다.