MQTTを利用してThingScaleのビルトインMQTTブローカにpublish/subscribeする方法を解説します。
Panel | |
---|---|
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 |
(NOTE)TAG_NAME はオプションです。 | JSON or Numeric |
Publish(binary_mode) |
(NOTE)TAG_NAME はオプションです。 | Binary(raw stream) |
Subscribe |
| JSON |
Warning | |
---|---|
title | トピックについてPublish時にトピックに含まれるデバイストークンが不正な場合はThingScaleはpublishされたデータの受け取りを拒否します。 トピックが正しく、デバイスID(DEVICE_ID)がデバイスレジストリに存在しない場合に、ThingScale は新規デバイスとしてレジストリに登録します。(オートプロビジョニング) Subscribe時は<DEVICE_TOKEN>/#のトピックの購読だけが許可されます。ThingScaleからデバイスに対してコマンドを発行するには、デバイス側で<DEVICE_TOKEN>/<DEVICE_ID>/subscribeトピックをsubscribeする事でPublish Service(参照:/wiki/spaces/TD/pages/8454180)から送信されたペイロードを受け取る事が可能です。 |
Info |
---|
ペイロードについてバイナリデータを取り扱う場合は、バイナリメッセージ用のトピックを指定してMQTTペイロードにはバイナリデータをそのまま格納してください。 バイナリメッセージはvalue1のペイロードとして、16進ダンプ文字列の形式に変換されStream APIから参照可能です。 バイナリメッセージのシリアライズはMessagePack(http://msgpack.org)形式で格納する事を推奨します。 |
Note |
---|
NOTEデバイスからpublishしたストリームが正しくハンドルされたか(デバイストークン認証の不一致etc)の確認メカニズムはMQTTにありません。 その他の詳しいMQTT関連の仕様については、MQTT V3.1 Protocol Specificationを参照してください。 |
チュートリアル
...
パブリッシュ
ThingScaleにデータをパブリッシュする
Code Block | title | 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> | |
title |
ThingScaleにMQTTS(MQTT over TLS)でデータをパブリッシュする
Code Block |
---|
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からデバイスに送信されたコマンドを受け取る
Code Block |
---|
mosquitto_sub -h m.thingscale.io -t '<DEVICE_TOKEN>/<DEVICE_ID>/subscribe' -u <ThingScale_ID> -P <DEVICE_TOKEN> |
...