IoT Shadow란?
- IoT device의 Online/Offline 상태에 관계없이 application이나 다른 서비스에서 장치에 명령을 내리거나 상태를 조회할 수 있게 하는 서비스
- Shadow는 신뢰할 수 있는 저장 공간을 제공
- device, application, 클라우드 서비스들이 데이터를 공유 가능
- device 상태 정보를 손실 없이 device와 서비스를 연결
- Shadow를 통해 device 상태를 수정하거나 조회할 수 있음
- application은 shadow를 업데이트 하면서 device 상태를 업데이트할 수 있음
- shadow 상태가 업데이트 되면 AWS IoT는 device에 message를 전달
- device는 메세지를 받고 상태를 업데이트하고 업데이트 된 상태를 publish
- application은 shadow update를 구독하거나 get으로 조회할 수 있음
- device나 application이 오프라인일 경우에 device나 application은 shadow를 통해 소통할 수 있음
- device가 offline 되었다가 reconnect되면 shadow로부터 현재 상태를 받아서 업데이트 후 shadow에 update된 상태 공지
- application이 offline 상태여도 device는 shadow에 device의 상태를 지속적으로 업데이트 할 수 있음
Shadow 사용하기
unnamed shadow 및 named shadow
- 이름이 있고 없고의 차이
- unnamed는 기본적으로 제공(디바이스마다 하나만 가질 수 있음)
- topic
$aws/things/{thingName}/shadow
- named shadow
- topic
$aws/things/{thingName}/shadow/name/{shadowName}
Shadow 데이터 접근
- reserved된 MQTT topic이나 HTTP로 shadow에 접근할 수 있음
- desired
- reported
- delta
- desired와 reported 상태의 다른점을 명시
"state": {
"desired": {
"volume": 10,
"brightness": 20
},
"reported": {
"volume": 20,
"brightness": 30
},
"delta": {
"volume": 10,
"brightness": 20
}
}
shadow 사용하기
device에서 shadow 사용 준비
- device에서 아래 topic을 모두 subscribe 필요
- ShadowTopicPrefix
$aws/things/{thingName}/shadow
$aws/things/{thingName}/shadow/name/{shadowName}
- Shadow 삭제 여부 (Shadow 삭제 명령에 대한 accept/reject)
ShadowTopicPrefix/delete/accepted
ShadowTopicPrefix/delete/rejected
- /get topic에 메시지를 게시했을 때, 결과를 받을 수 있는 topic
ShadowTopicPrefix/get/accepted
ShadowTopicPrefix/get/rejected
- Shadow의 데이터가 Update됐을 때, 결과를 받을 수 있는 topic
ShadowTopicPrefix/update/accepted
ShadowTopicPrefix/update/rejected
ShadowTopicPrefix/update/delta
device의 shadow 사용 시나리오
- subscribe됐는지 /get topic을 publish해서 테스트
/get/accepted
message를 받으면 body를 initial state로 사용
/get/rejected
message를 받으면 /update
를 publish해서 shadow 생성 필요
- Message 처리 방법
- 장치가 AWS IoT에 연결되어있을 때
/update/delta
topic으로부터 메세지를 받고 장치의 상태를 업데이트
/update
topic에 reported 값에 장치의 현재 상태를 업데이트 (장치의 상태가 변할때 계속)
- 장치가 AWS IoT에 재연결 될때
/update/delta
topic으로부터 메세지를 받고 장치의 상태를 업데이트
/update
topic에 reported 값에 장치의 현재 상태를 업데이트
application의 shadow 사용 시나리오
/update
topic에 desired 값에 변경하고 싶은 device의 상태 값을 업데이트
- device의 상태 변경 결과 받기
/update
topic을 사용해서 push 받기
ShadowTopicPrefix/update/accepted
ShadowTopicPrefix/update/rejected
/get
topic에 메시지를 게시해서 /get
topic으로 push 받기
ShadowTopicPrefix/get/accepted
ShadowTopicPrefix/get/rejected
- http get request로 데이터를 가져오기