기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이 섹션에서는 앱 또는 서비스가 AWS IoT Device Shadow 서비스와 상호 작용하는 방법을 설명합니다. 이 예에서는 앱 또는 서비스가 섀도우만 대상으로 상호 작용하거나 섀도우를 통해 디바이스만 대상으로 상호 작용한다고 가정합니다. 이 예에는 섀도우 생성 또는 삭제와 같은 관리 작업이 포함되지 않습니다.
이 예제에서는 AWS IoT Device Shadow 서비스의를 사용하여 섀도우와 REST API 상호 작용합니다. 의 publish/subscribe communications model, this example uses the request/response 통신 모델을 디바이스에서 섀도우 사용사용하는에서 사용되는 예제와는 다릅니다RESTAPI. 즉, 앱 또는 서비스가 요청을 해야 응답을 받을 수 있습니다 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
앱 또는 서비스가 연결되어 있는 동안 사용하는 섀도우URLs의에 대한 HTTP GET 요청을 전송하여 현재 상태를 주기적으로 쿼리할 AWS IoT수 있습니다.
최종 사용자가 앱 또는 서비스와 상호 작용하여 디바이스의 상태를 변경하면 앱 또는 서비스는 섀도우의 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
속성을 업데이트합니다.