MQTTで接続する
MQTTを利用してThingScaleのビルトインMQTTブローカにpublish/subscribeする方法を解説します。
On this page:
パブリッシュ/サブスクライブ
MQTT Endpoint
Protocol | Address:Port |
---|---|
MQTT | |
MQTTS | |
Websocket | |
Secure Websocket |
Version: 3.1 and 3.1.1
Support:
QoS0(最低1回) and QoS1(少なくとも1回) and QoS2(正確に1回)
Wills:Yes
Retained Message:Yes
Clean sesson/Durable connections:Yes
制限:
Publish APIはQoS2をサポートしません。
MQTT Parameters
クライアントIDは1~23文字の文字列です。以下の形式を推奨します。 <Device_ID>_<random suffix>
Username:ThingScale_ID(U******)
Password:DEVICE_TOKEN
MQTT Topic
Pub/Sub | Topic | Payload |
---|---|---|
Publish | DEVICE_TOKEN/json/DEVICE_ID/[TAG_NAME] (NOTE)TAG_NAME はオプションです。 | JSON or Numeric |
Publish(binary_mode) | DEVICE_TOKEN/binary/DEVICE_ID/[TAG_NAME] (NOTE)TAG_NAME はオプションです。 | Binary(raw stream) |
Subscribe | DEVICE_TOKEN/DEVICE_ID/subscribe | JSON |
トピックについて
Publish時にトピックに含まれるデバイストークンが不正な場合はThingScaleはpublishされたデータの受け取りを拒否します。
トピックが正しく、デバイスID(DEVICE_ID)がデバイスレジストリに存在しない場合に、ThingScale は新規デバイスとしてレジストリに登録します。(オートプロビジョニング)
Subscribe時は<DEVICE_TOKEN>/#のトピックの購読だけが許可されます。ThingScaleからデバイスに対してコマンドを発行するには、デバイス側で<DEVICE_TOKEN>/<DEVICE_ID>/subscribeトピックをsubscribeする事でPublish Service(参照:Publish service一覧)から送信されたペイロードを受け取る事が可能です。
ペイロードについて
バイナリデータを取り扱う場合は、バイナリメッセージ用のトピックを指定してMQTTペイロードにはバイナリデータをそのまま格納してください。
バイナリメッセージはvalue1のペイロードとして、16進ダンプ文字列の形式に変換されStream APIから参照可能です。
バイナリメッセージのシリアライズはMessagePack(http://msgpack.org)形式で格納する事を推奨します。
NOTE
デバイスからpublishしたストリームが正しくハンドルされたか(デバイストークン認証の不一致etc)の確認メカニズムはMQTTにありません。
その他の詳しいMQTT関連の仕様については、MQTT V3.1 Protocol Specificationを参照してください。
チュートリアル
パブリッシュ
ThingScaleにデータをパブリッシュする
mosquitto_pub -h m.thingscale.io -t '<DEVICE_TOKEN>/json/<DEVICE_ID>' -m '{"temp":20, "humidity":50}' -d -u <ThingScale_ID> -P <DEVICE_TOKEN>
ThingScaleにMQTTS(MQTT over TLS)でデータをパブリッシュする
mosquitto_pub -h m.thingscale.io -p 8883 -t '<DEVICE_TOKEN>/json/<DEVICE_ID>' -m "25.6" --cafile /etc/pki/tls/certs/ca-bundle.crt -d -u <ThingScale_ID> -P <DEVICE_TOKEN>
上記ケースでは、root証明書はCentOSの標準root証明書バンドルを指定しています。
サブスクライブ
Publish Serviceからデバイスに送信されたコマンドを受け取る
mosquitto_sub -h m.thingscale.io -t '<DEVICE_TOKEN>/<DEVICE_ID>/subscribe' -u <ThingScale_ID> -P <DEVICE_TOKEN>
© 2014-2022 SENSINICS,LLC