AWS IoT의 Thing Shadow를 부담없이 시도해보기 with mosquitto
간단하게 요점을 5개 씁니다.
여기에서는 부담없이 mosquitto를 사용하여 시도한 결과를 올립니다.
전제 조건은
· mosquitto-clients를 이용하여 AWS IoT와의 Pub/Sub가 되어 있는 것
htps : // m / TKYK38 / ms / 2 또는 19b27503f6에 0dfc84
입니다.
AWS 콘솔에서 섀도우 문서를 열어 둡니다.
이것을 열면서 작업하면 상태가 업데이트되는 곳을 잘 이해할 수 있습니다.
(IoT 콘솔 > 관리 > 사물 > 섀도우로 열 수 있습니다)
publish용 샘플 스크립트
pub.shadow.sh
#!/bin/bash
endpoint=`aws iot describe-endpoint`
keydir=/home/ubuntu/iot_sdk
### update
topic=\$aws/things/EC2_ubuntu/shadow/update
### get
#topic=\$aws/things/EC2_ubuntu/shadow/get
### delete
#topic=\$aws/things/EC2_ubuntu/shadow/delete
#ifile=shadow.desired.json
ifile=shadow.reported.json
mosquitto_pub --cafile ${keydir}/root-CA.crt --cert ${keydir}/EC2_ubuntu.cert.pem --key ${keydir}/EC2_ubuntu.private.key -h "${endpoint}" -p 8883 -q 1 -t ${topic} -i mosquitto_pub -f ${ifile}
subscribe용 샘플 스크립트
sub.shadow.sh
endpoint=`aws iot describe-endpoint`
keydir=/home/ubuntu/iot_sdk
topic=\$aws/things/EC2_ubuntu/shadow/update
#topic=\$aws/things/EC2_ubuntu/shadow/update/accepted
#topic=\$aws/things/EC2_ubuntu/shadow/update/documents
#topic=\$aws/things/EC2_ubuntu/shadow/update/rejected
#topic=\$aws/things/EC2_ubuntu/shadow/update/delta
#topic=\$aws/things/EC2_ubuntu/shadow/get
#topic=\$aws/things/EC2_ubuntu/shadow/get/accepted
#topic=\$aws/things/EC2_ubuntu/shadow/get/rejected
#topic=\$aws/things/EC2_ubuntu/shadow/delete
#topic=\$aws/things/EC2_ubuntu/shadow/delete/accepted
#topic=\$aws/things/EC2_ubuntu/shadow/delete/rejected
mosquitto_sub --cafile ${cadir}/root-CA.crt --cert ${keydir}/tmp.cert.txt --key ${keydir}/tmp.private.txt -h "${endpoint}" -p 8883 -q 1 -t ${topic}
디바이스 상태를 알리는 JSON 샘플
shadow.reported.json
{
"state" : {
"reported" : {
"color" : "yellow",
"power" : "on"
}
}
}
장치에 지시(상태 업데이트)를 위한 JSON 샘플
shadow.desired.json
{
"state" : {
"desired" : {
"color" : "red",
"power" : "on"
}
}
}
장치 상태 업데이트 /update
/update/accepted를 sub한 상태에서 /update에 shadow.reported.json을 pub
다음과 같은 JSON을 subscribe 할 수 있다.
{"state":{"reported":{"color":"yellow","power":"on"}},"metadata":{"reported":{"color":{"timestamp":1512807898},"power":{"timestamp":1512807898}}},"version":13,"timestamp":1512807898}
/update/documents를 sub한 상태에서 /update에 shadow.reported.json을 pub
다음과 같은 JSON을 subscribe 할 수 있다.
{"previous":{"state":{"desired":{"color":"red","power":"on"},"reported":{"color":"blue","power":"on"}},"metadata":{"desired":{"color":{"timestamp":1512805884},"power":{"timestamp":1512805884}},"reported":{"color":{"timestamp":1512808170},"power":{"timestamp":1512808170}}},"version":17},"current":{"state":{"desired":{"color":"red","power":"on"},"reported":{"color":"blue","power":"on"}},"metadata":{"desired":{"color":{"timestamp":1512805884},"power":{"timestamp":1512805884}},"reported":{"color":{"timestamp":1512808184},"power":{"timestamp":1512808184}}},"version":18},"timestamp":1512808184}
/update/rejected를 sub한 상태에서 /update에 shadow.reported.json을 pub
예를 들어, "reported"를 "report"로 변경하고 pub 해 보면 다음과 같은 에러(JSON)를 subscribe 할 수 있다.
{"code":400,"message":"State contains an invalid node: 'report'"}
/update/delta를 sub한 상태에서 /update에 shadow.reported.json을 pub
reported와 desired의 차이가 있는 경우에 subscribe 할 수 있다.
{"version":21,"timestamp":1512808331,"state":{"color":"red"},"metadata":{"color":{"timestamp":1512805884}}}
디바이스 상태 얻기 /get
/get/accepted 를 sub한 상태에서, /get에 메세지를 pub 한다
/get에 pub하면, desired와 reported 양쪽 모두의 정보를 subscribe 할 수 있다.
(/get에 pub하는 메세지는 무엇이든 좋다.)
{"state":{"desired":{"color":"red","power":"on"},"reported":{"color":"yellow","power":"on"}},"metadata":{"desired":{"color":{"timestamp":1512805884},"power":{"timestamp":1512805884}},"reported":{"color":{"timestamp":1512808392},"power":{"timestamp":1512808392}}},"version":23,"timestamp":1512808573}
/get/rejected 를 sub한 상태에서, /get에 메세지를 pub 한다
shadow가 존재하지 않는 상태에서/get에 pub하면 다음과 같은 에러(JSON)를 subscribe 할 수 있다.
{"code":404,"message":"No shadow exists with name: 'EC2_ubuntu'"}
장치 상태 삭제 /delete
/delete/accepted 를 sub한 상태에서 /delete에 메시지를 pub
shadow가 삭제되면 다음과 같은 JSON을 subscribe 할 수 있습니다.
{"version":23,"timestamp":1512809286}
/delete/rejected 를 sub한 상태에서 /delete에 메시지를 pub
shadow가 존재하지 않는 상태에서 shadow를 삭제하려고 하면 다음과 같은 에러(JSON)를 subscribe 할 수 있다.
{"code":404,"message":"No shadow exists with name: 'EC2_ubuntu'"}
참고 정보
AWS IoT 개발자 가이드입니다.
Thing Shadow의 MQTT 주제
Reference
이 문제에 관하여(AWS IoT의 Thing Shadow를 부담없이 시도해보기 with mosquitto), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TKYK38/items/bb77c3aa9a32ea40b845텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)