기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
디바이스에서 섀도우 사용
이 섹션에서는 디바이스가 Device Shadow 서비스와 통신하는 데 선호되는 방법인 MQTT 메시지를 사용하여 AWS IoT 섀도우와 디바이스 통신을 설명합니다.
섀도우 통신은의 request/response model using the publish/subscribe 통신 모델을 에뮬레이션합니다MQTT. 모든 섀도우 작업은 요청 주제, 성공한 응답 주제(accepted
) 및 오류 응답 주제(rejected
)로 구성됩니다.
앱 및 서비스에서 디바이스가 연결되어 있는지 여부를 확인할 수 있도록 하려면 디바이스 연결 상태 감지 단원을 참조하세요.
중요
MQTT는 커뮤니케이션 모델을 게시/구독하므로 요청 주제를 게시하기 전에 응답 주제를 구독해야 합니다. 그렇지 않으면 게시한 요청에 대한 응답을 받지 못합니다.
AWS IoT Device SDK를 사용하여 디바이스 섀도우 서비스를 호출하면 APIs이 작업이 자동으로 처리됩니다.
이 섹션의 예제에서는이 표에 설명된 대로가 명명된 또는 명명되지 않은 섀도우를 참조할 ShadowTopicPrefix
수 있는 약식 형태의 주제를 사용합니다.
섀도우는 명명되거나 명명되지 않을(클래식) 수 있습니다. 각 섀도우에 사용되는 주제는 주제 접두사만 다릅니다. 이 표에서는 각 섀도우 유형에서 사용하는 주제 접두사를 보여줍니다.
ShadowTopicPrefix 값 |
섀도우 유형 |
---|---|
$aws/things/ |
명명되지 않은(클래식) 섀도우 |
$aws/things/ |
명명된 섀도우 |
중요
앱 또는 서비스의 섀도우 사용이 일관되고 디바이스의 해당 구현에 의해 지원되는지 확인합니다. 예를 들어 섀도우가 생성, 업데이트 및 삭제되는 방법을 고려합니다. 또한 디바이스와, 섀도우를 통해 해당 디바이스에 액세스하는 앱 또는 서비스에서 업데이트가 처리되는 방식을 고려합니다. 디바이스의 상태가 업데이트되고 보고되는 방식과 앱 및 서비스가 디바이스 및 섀도우와 상호 작용하는 방식에 대한 설계가 명확해야 합니다.
전체 주제를 생성하려면 참조할 섀도우 유형에 대해
를 선택하고 ShadowTopicPrefix
및 thingName
(해당하는 경우)을 해당 값으로 바꾸고 다음 표에 표시된 대로 주제 스텁을 추가합니다. 주제는 대/소문자를 구분합니다.shadowName
섀도우에 대해 예약된 주제에 대한 자세한 내용은 섀도우 주제 단원을 참조하세요.
에 처음 연결할 때 디바이스 초기화 AWS IoT
디바이스가에 등록한 후에는 지원하는 섀도우에 대해 이러한 MQTT 메시지를 구독 AWS IoT해야 합니다.
주제 | 의미 | 이 주제를 수신할 때 디바이스가 수행해야 하는 작업 |
---|---|---|
|
|
삭제된 섀도우를 수용하는 데 필요한 작업(예: 업데이트 게시 중지) |
|
|
메시지 본문의 오류 메시지에 대한 응답 |
|
에서 |
메시지 본문에서 상태 문서를 처리하는 데 필요한 작업 |
|
|
메시지 본문의 오류 메시지에 대한 응답 |
|
에서 |
메시지 본문의 업데이트된 데이터가 디바이스 상태와 일치하는지 확인 |
|
|
메시지 본문의 오류 메시지에 대한 응답 |
|
에 대한 요청에 의해 섀도우 문서가 업데이트되었으며 메시지 본문 AWS IoT에는 요청된 변경 사항이 포함되어 있습니다. |
메시지 본문의 원하는 상태와 일치하도록 디바이스의 상태 업데이트 |
|
섀도우 업데이트가 최근에 완료되었으며 메시지 본문에 현재 섀도우 문서가 포함되어 있습니다. |
메시지 본문의 업데이트된 상태가 디바이스의 상태와 일치하는지 확인 |
각 섀도우에 대해 위 표의 메시지를 구독한 후 디바이스는 각 섀도우에 /get
주제를 게시하여 지원하는 섀도우가 이미 생성되었는지 테스트해야 합니다. /get/accepted
메시지가 수신되면 메시지 본문에 섀도우 문서가 포함되며, 디바이스에서 이 문서를 사용하여 해당 상태를 초기화할 수 있습니다. /get/rejected
메시지가 수신되면 현재 디바이스 상태와 함께 /update
메시지를 게시하여 섀도우를 생성해야 합니다.
예를 들어, 클래식 섀도우나 명명된 섀도우가 없는 사물 My_IoT_Thing
이 있다고 가정합니다. 이제 예약된 주제 $aws/things/My_IoT_Thing/shadow/get
에 대한 /get
요청을 게시하면 사물에 섀도우가 없기 때문에 $aws/things/My_IoT_Thing/shadow/get/rejected
주제에 대한 오류가 반환됩니다. 이 오류를 해결하려면 먼저 다음 페이로드와 같은 현재 디바이스 상태를 포함하는 $aws/things/My_IoT_Thing/shadow/update
주제를 사용하여 /update
메시지를 게시합니다.
{ "state": { "reported": { "welcome": "aws-iot", "color": "yellow" } } }
이제 사물에 대한 클래식 섀도우가 생성되고 메시지가 $aws/things/My_IoT_Thing/shadow/update/accepted
주제에 게시됩니다. 주제 $aws/things/My_IoT_Thing/shadow/get
에 게시하는 경우 디바이스 상태와 함께 $aws/things/My_IoT_Thing/shadow/get/accepted
주제에 대한 응답이 반환됩니다.
명명된 섀도우의 경우 get 요청을 사용하기 전에 먼저 명명된 섀도우를 생성하거나 섀도우 이름이 포함된 업데이트를 게시해야 합니다. 예를 들어 명명된 섀도우 namedShadow1
을 생성하려면 먼저 디바이스 상태 정보를 주제 $aws/things/My_IoT_Thing/shadow/name/namedShadow1/update
에 게시합니다. 상태 정보를 검색하려면 명명된 섀도우 $aws/things/My_IoT_Thing/shadow/name/namedShadow1/get
에 대한 /get
요청을 사용합니다.
디바이스가 연결된 동안 메시지 처리 AWS IoT
디바이스가 연결되어 있는 동안 /update/delta 메시지를 수신할 AWS IoT수 있으며 다음을 통해 디바이스 상태를 섀도우의 변경 사항과 일치해야 합니다.
-
수신된 모든 /update/delta 메시지를 읽고 일치하도록 디바이스 상태를 동기화합니다.
-
디바이스의 상태가 변경될 때마다 디바이스의 현재 상태가 포함된
reported
메시지 본문과 함께 /update 메시지 게시.
디바이스가 연결되어 있는 동안 표시된 경우 이러한 메시지를 게시해야 합니다.
표시 | 주제 | 페이로드 |
---|---|---|
디바이스의 상태가 변경되었습니다. |
|
|
디바이스가 섀도우와 동기화되지 않았을 수 있습니다. |
|
(비어 있음) |
디바이스에 대한 작업은 디바이스가 제거되거나 교체되는 경우와 같이 디바이스에서 더 이상 섀도우를 지원하지 않음을 나타냅니다. |
|
(비어 있음) |
디바이스가에 다시 연결될 때 메시지 처리 AWS IoT
하나 이상의 섀도우가 있는 디바이스가 연결되면 다음을 통해 지원하는 모든 섀도우의 상태와 동기화 AWS IoT해야 합니다.
-
수신된 모든 /update/delta 메시지를 읽고 일치하도록 디바이스 상태를 동기화합니다.
-
디바이스의 현재 상태가 포함된
reported
메시지 본문과 함께 /update 메시지 게시.