久しぶりのThingsBoardです。
ESP32からThingsBoardにテレメトリをアップするには、HTTP、MQTTなどに加えて、CoAPでもできます。
CoAPは、UDPで軽量なので、ESP32に合っているかなあと。
送信には、ESP32で動作するJavascript実行環境を使います。
ThingsBoardのCoAPの仕様は以下にあります。
テレメトリにアップロード
テレメトリのUploadは、上記を見ると以下のフォーマットとのことです。
coap://$THINGSBOARD_HOST_NAME/api/v1/$ACCESS_TOKEN/telemetry
書き込む値は、送信BodyにJSONで指定します。
coap.setCallback(e =>{
console.log(JSON.stringify(e));
});
var token = coap.post("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/telemetry", value);
アクセストークンは、ThingsBoardにデバイスを追加すると発行されます。
valueは、設定したい値をObjectで指定します。以下例です。
value = { temperature: 12.3 }
設定したコールバックに結果が返ってきます。
{"type":1, "code":197, "message_id":31327, "token":[coap.postの戻り値], "remote_ip":"[ThingsBoardサーバのIPアドレス]", "remote_port":5683}
typeはMessage Type、codeはCoAP Response Code(CoAPコード)です。
こんな感じで、ThingsBoardの画面で、テレメトリがアップされていることが確認できます。
属性のアップロード
属性のアップロードは以下です。
coap://$THINGSBOARD_HOST_NAME/api/v1/$ACCESS_TOKEN/attributes
書き込む値は、送信BodyにJSONで指定します。
var token = coap.post("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/attributes", value);
属性の取得
次は属性を取得してみます。
coap://$THINGSBOARD_HOST_NAME/api/v1/$ACCESS_TOKEN/attributes?clientKeys=attribute1,attribute2&sharedKeys=shared1,shared2
var token = coap.get("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/attributes?clientKeys=temperature");
コールバックに返ってきます。
{"type":1, "code":201, "message_id":31328, "token":[coap.postの戻り値], "payload":"{\"client\":{\"temperature\":12.3}}", "content_format":50, "remote_ip":"[ThingsBoardサーバのIPアドレス]", "remote_port":5683}
まとめると、ESP32内のJavascriptはこうなります。
import * as coap from "Coap";
coap.setCallback(e =>{
console.log(JSON.stringify(e));
});
setInterval(() =>{
console.log("call interval");
var value = {
temperature: 12.3
};
// var token = coap.post("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/telemetry", value);
// console.log("token=" + token);
// var token= coap.post("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/attributes", value);
// console.log("token=" + token);
var token = coap.get("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/attributes?clientKeys=temperature");
console.log("token=" + token);
}, 2000);
function loop(){
esp32.update();
}
(参考) ESP32で動作するJavascript実行環境
ESP32で動作するJavascript実行環境を公開しています。
この中で実装しています。
「電子書籍:M5StackとJavascriptではじめるIoTデバイス制御」
サポートサイト
(参考)ThingsBoardインストール
以上
