MQTTで接続する

MQTTを利用してThingScaleのビルトインMQTTブローカにpublish/subscribeする方法を解説します。

On this page:

パブリッシュ/サブスクライブ


MQTT Endpoint

Protocol

Address:Port

 

  • 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

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