AWS IoT thing shadow 가져오기 및 업데이트

9726 단어 awsIoTAWS
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를 실행하도록 RuleAction를 설정합니다.
장치 측에서보고 된 값이 변경되었거나 특정 임계 값을 초과했음을 감지하여 특정 작업을 수행합니다.
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"
});
keyPathcertPath 에는 증명서의 패스를 지정한다.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를 지울 수 있다.
덧붙여 안의 요소가 모두 없어지면 desiredreported의 키 자체가 없어진다. 또한, 이것은 delta에서 트리거 할 수 없기 때문에주의.

공식 sdk 자료


  • htps : // / cs. 아 ws. 아마존. 이 m/아 WS잖아 Sc리 ptSDK/아 st/아 WS/이오 t였다. HTML # Up Date Gang
  • htps : // 기주 b. 이 m/아ws/아ws-이오 t로 ゔぃ세-sdkjs/bぉb/마s r/레아 D메. md
  • 좋은 웹페이지 즐겨찾기