AWS IoT thing shadow 가져오기 및 업데이트
이미지
애플리케이션측(Eg. Lambda)
준비
Lambda 함수를 만들고
AWS IoT Data
에 대한 액세스 권한을 할당합니다.기본 동작
// 初期化
const iotdata = new aws.IotData( { endpoint: <エンドポイント> } );
const params = {
thingName: <thing名>,
payload: <更新内容>
};
// データ更新
/// 非同期で更新する。
const res = iotdata.updateThingShadow(params, (err, data) => {
// 実行後のコールバック関数
});
/// 同期的に更新したい。
const res = await iotdata.updateThingShadow(params).promise();
// データ取得
const params = {
thingName: <thing名>
};
let res = await iotdata.getThingShadow(params).promise();
console.log(res)
동기 업데이트에서는
AWS.Response()
개체의 promise()
를 사용합니다.이벤트 핸들러의 세 번째 인수
callback
를 사용하는 방법도 있지만 귀찮습니다.→ 공식 문서:AWS.Response
→ 공식 문서:promise
이벤트 중심의 호출
shadow의 특정 변경을 트리거하고 Lambda를 실행하도록
Rule
및 Action
를 설정합니다.장치 측에서보고 된 값이 변경되었거나 특정 임계 값을 초과했음을 감지하여 특정 작업을 수행합니다.
Action은 Lambda에 한하지 않고 다양한 AWS 서비스를 이용할 수 있다.
설정 방법 등은 여기서는 생략, 이하 참조.
장치측
마찬가지로 aws-sdk를 사용할 수도 있지만, 디바이스에 넣는 모듈 크기에 제한이 있는 환경 등에서는 aws-sdk는 70MB 정도로 너무 크기 때문에 AWS IoT 특화 sdk를 이용.
준비
shadow와 통신할 준비.
thing을 작성하고 작성시에 생성하거나 등록한 증명서는 로컬에 떨어지고 있다고 가정한다.
var awsIot = require('aws-iot-device-sdk');
var thingShadows = awsIot.thingShadow({
keyPath: "./xxxxxxxxxx-private.pem.key",
certPath: "./xxxxxxxxxx-certificate.pem.crt",
caPath: "./rootCA.pem",
clientId: "<thing名>",
host: "xxxxxxxxxxxxx-xxx.iot.ap-northeast-1.amazonaws.com"
});
keyPath
및 certPath
에는 증명서의 패스를 지정한다.caPath
는 루트 인증서입니다. 공식 에서 떨어지고 저장된 파일 이름과 경로를 지정합니다. clientId
는 thing명, host
는 엔드포인트명이다. 엔드포인트는 AWS IoT 콘솔의 사이드바에 있는 設定
에서 참조할 수 있습니다. 혹은, 각 thing의 相互作用
의 항목으로부터도 확인 가능.기본 동작
thingShadows.on('connect', function () {
// AWS IoTのthingとの接続時の処理をこの中で書く。
thingShadows.register(<thing名>, {}, function () {
// 登録作業。
});
}
thingShadows.on('status',
function (<thing名>, stat, clientToken, stateObject) {
// shadowの取得や変更はstatus変化として扱われこのイベントを受け取る。(パラメータのstatはstateが来る。)
// stateObjectにshadowの値が含まれる。
}
);
thingShadows.on('delta',
function (<thing名>, stat, clientToken, stateObject) {
// "desired"と"reported"に差異が生じた場合にはこのイベントを受け取る。
// なお、stateObjectにはdelta部分のみ含まれる。
}
);
// shadow全取得 → なお、取得する値は上記の'state'イベントとして受け取る。
thingShadows.get(<thing名>);
이벤트 중심의 호출
상기의
delta
를 이용.그 외
thing을 작성한 초기의 shadow에는
welcome
와 같은 적당한 값이 들어 있어 콘솔의 編集
로부터 삭제하는 것도 사라지지 않아 수수하게 고생한다. shadow는 직접 지워 삭제하는 것이 아니라 값에 null
를 지정해 갱신해 주는 것으로 삭제할 수 있으므로 그렇게 갱신하면 초기의 welcome
를 지울 수 있다.덧붙여 안의 요소가 모두 없어지면
desired
나 reported
의 키 자체가 없어진다. 또한, 이것은 delta에서 트리거 할 수 없기 때문에주의.공식 sdk 자료
Reference
이 문제에 관하여(AWS IoT thing shadow 가져오기 및 업데이트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kept1994/items/f6e892c732f29d913ac9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)