디바이스에서 섀도우 사용 - AWS IoT Core

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

디바이스에서 섀도우 사용

이 섹션에서는 장치가 Device Shadow 서비스와 통신하는 데 선호되는 방법인 MQTT 메시지를 사용한 섀도우와의 AWS IoT 장치 통신에 대해 설명합니다.

섀도우 통신은 MQTT의 게시/구독 통신 모델을 사용하여 요청/응답 모델을 에뮬레이트합니다. 모든 섀도우 작업은 요청 주제, 성공한 응답 주제(accepted) 및 오류 응답 주제(rejected)로 구성됩니다.

앱 및 서비스에서 디바이스가 연결되어 있는지 여부를 확인할 수 있도록 하려면 디바이스 연결 상태 감지 단원을 참조하세요.

중요

MQTT는 게시/구독 통신 모델을 사용하기 때문에 요청 주제를 게시하기 에 응답 주제를 구독해야 합니다. 그렇지 않으면 게시한 요청에 대한 응답을 받지 못합니다.

AWS IoT Device SDK를 사용하여 디바이스 섀도우 서비스 API를 호출하면 이 작업이 자동으로 처리됩니다.

이 섹션의 예에서는 다음 표에 설명된 것처럼 이름이 지정된 섀도우 또는 이름 없는 섀도우를 ShadowTopicPrefix참조할 수 있는 축약된 형식의 주제를 사용합니다.

섀도우는 명명되거나 명명되지 않을(클래식) 수 있습니다. 각 섀도우에 사용되는 주제는 주제 접두사만 다릅니다. 이 표에서는 각 섀도우 유형에서 사용하는 주제 접두사를 보여줍니다.

ShadowTopicPrefix 섀도우 유형
$aws/things/thingName/shadow 명명되지 않은(클래식) 섀도우
$aws/things/thingName/shadow/name/shadowName 명명된 섀도우
중요

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

전체 주제를 생성하려면 참조할 섀도우 유형에 대해 ShadowTopicPrefix를 선택하고 thingNameshadowName(해당하는 경우)을 해당 값으로 바꾸고 다음 표에 표시된 대로 주제 스텁을 추가합니다. 주제는 대/소문자를 구분합니다.

섀도우에 대해 예약된 주제에 대한 자세한 내용은 섀도우 주제 단원을 참조하세요.

처음 연결할 때 장치를 초기화하는 중 AWS IoT

디바이스를 AWS IoT 등록한 후에는 이러한 MQTT 메시지를 구독하여 지원하는 섀도우를 사용해야 합니다.

주제 의미 이 주제를 수신할 때 디바이스가 수행해야 하는 작업

ShadowTopicPrefix/delete/accepted

delete요청이 수락되었고 AWS IoT 섀도우가 삭제되었습니다.

삭제된 섀도우를 수용하는 데 필요한 작업(예: 업데이트 게시 중지)

ShadowTopicPrefix/delete/rejected

에서 delete 요청을 AWS IoT 거부했으며 섀도우는 삭제되지 않았습니다. 메시지 본문에 오류 정보가 포함되어 있습니다.

메시지 본문의 오류 메시지에 대한 응답

ShadowTopicPrefix/get/accepted

에서 get 요청을 수락했으며 AWS IoT 메시지 본문에는 현재 섀도우 문서가 포함되어 있습니다.

메시지 본문에서 상태 문서를 처리하는 데 필요한 작업

ShadowTopicPrefix/get/rejected

에서 get 요청을 거부했으며 메시지 본문에는 오류 정보가 AWS IoT 들어 있습니다.

메시지 본문의 오류 메시지에 대한 응답

ShadowTopicPrefix/update/accepted

에서 update 요청을 수락했으며 AWS IoT 메시지 본문에는 현재 섀도우 문서가 포함되어 있습니다.

메시지 본문의 업데이트된 데이터가 디바이스 상태와 일치하는지 확인

ShadowTopicPrefix/update/rejected

에서 update 요청을 거부했으며 메시지 본문에는 오류 정보가 AWS IoT 들어 있습니다.

메시지 본문의 오류 메시지에 대한 응답

ShadowTopicPrefix/update/delta

에 대한 요청에 의해 섀도우 문서가 업데이트되었으며 메시지 본문에는 요청된 변경 내용이 포함되어 있습니다. AWS IoT

메시지 본문의 원하는 상태와 일치하도록 디바이스의 상태 업데이트

ShadowTopicPrefix/update/documents

섀도우 업데이트가 최근에 완료되었으며 메시지 본문에 현재 섀도우 문서가 포함되어 있습니다.

메시지 본문의 업데이트된 상태가 디바이스의 상태와 일치하는지 확인

각 섀도우에 대해 위 표의 메시지를 구독한 후 디바이스는 각 섀도우에 /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

  1. 수신된 모든 /update/delta 메시지를 읽고 일치하도록 디바이스 상태를 동기화합니다.

  2. 디바이스의 상태가 변경될 때마다 디바이스의 현재 상태가 포함된 reported 메시지 본문과 함께 /update 메시지 게시.

디바이스가 연결되어 있는 동안 표시된 경우 이러한 메시지를 게시해야 합니다.

표시 주제 페이로드

디바이스의 상태가 변경되었습니다.

ShadowTopicPrefix/update

reported 속성이 있는 섀도우 문서

디바이스가 섀도우와 동기화되지 않았을 수 있습니다.

ShadowTopicPrefix/get

(비어 있음)

디바이스에 대한 작업은 디바이스가 제거되거나 교체되는 경우와 같이 디바이스에서 더 이상 섀도우를 지원하지 않음을 나타냅니다.

ShadowTopicPrefix/delete

(비어 있음)

기기가 다음에 다시 연결되면 메시지를 처리합니다. AWS IoT

섀도우가 하나 이상 있는 장치가 AWS IoT 연결되면 다음과 같이 상태를 지원하는 모든 섀도우의 상태와 동기화해야 합니다.

  1. 수신된 모든 /update/delta 메시지를 읽고 일치하도록 디바이스 상태를 동기화합니다.

  2. 디바이스의 현재 상태가 포함된 reported 메시지 본문과 함께 /update 메시지 게시.