初めてWatson IoT Platformを使ってみよう、というかたのためのガイドです。
この記事では次を紹介します。
- デバイスをMQTTを使ってWatson IoT Platformに接続する際の設定について
Watson Internet of Thingsサービス
Watson IoT Platformが何かについては、下記に説明があります。
Watson IoT Platform について
アプリケーションとIoTデバイスをつなぐプラットフォームです。
IoTデバイスは、プラットフォームとMQTTとHTTPでアクセスすることができます。
MQTT Brokerとの比較
Watson IoT Platformは、単なるMQTT Brokerと比較すると、セキュリティを確保するために、次の仕組みが構築されています。
-
デバイスからデバイスに直接メッセージを送信できない。
-
デバイスとアプリケーションは直接メッセージを送受信できる。
-
デバイスからデバイスにメッセージを送りたい場合は、一度、アプリケーションを経由する。
この仕組みは下記にて説明があります。
IoT デバイス間のデータ・リークを回避する方法
この仕組みは、MQTTのClient IdentifierやTopicに規則を設けて実現しています。 -
Watson IoT Platformに接続されるものは、タイプがある。デバイスかアプリケーション。
-
メッセージにはタイプがある。event、command、statusなど。
-
デバイスからアプリケーションに送信されるメッセージは、eventとstatusタイプのみ。
-
デバイスはeventタイプのメッセージは送信できるが、受信はできない。
-
アプリケーションからデバイスに送信されるメッセージは、event、command、statusタイプ。
-
これらの通信は、Watson IoT Platformサービスごとに割り当てられる組織の内部のみに制限されています。
デバイスのMQTTの接続先
デバイスのMQTTの接続先については、次に説明があります。
クライアント接続 URL
接続先のホストは、次のフォーマットになります。
rgId.messaging.internetofthings.ibmcloud.com
例:
Watson IoT Platformの組織p2abc6の場合(下位にTCPを利用する場合)
tcp://p2abc6.messaging.internetofthings.ibmcloud.com/
デバイスのMQTTの認証
デバイスのMQTTの認証方法については、次に説明があります。
MQTT クライアント認証/デバイス認証
MQTTのUser nameとして、デバイスに限らず下記を指定します。
use-token-auth
Passwordとして、Watson IoT Platformにてデバイス登録を行う際に設定するパスワードを指定します。
デバイスのMQTTのClientId
デバイスのMQTTのCONNECT時のClientIdについては次に説明があります。
MQTT クライアント ID
デバイスのClientIdは、次のフォーマットに従う必要があります。
d:orgId:deviceType:deviceId
例:d:p2abc6:myDeviceType:mydevice01
デバイス向けのMQTTのTopicについて
デバイスのMQTTのTopicについては、次に説明があります。
イベントのパブリッシュ
Topicは次のフォーマットに従う必要があります。
iot-2/evt/event_id/fmt/format_string
例:iot-2/evt/myEvent/fmt/json
コマンドへのサブスクライブ
Topicは次のフォーマットに従う必要があります。
iot-2/cmd/command_id/fmt/format_string
例:iot-2/cmd/myCmd/fmt/json
メッセージフォーマット
送信するメッセージのフォーマットについて、次に説明があります。
管理対象デバイス/メッセージ形式
メッセージはjsonフォーマットで、送信したいデータは下記のようにdの値にします。
{d: {送信したいデータ} }
メッセージ送信例
MQTTクライアントを使用してWatson IoT PlatformへMQTTメッセージを送信する例です。
Mosquito_pubの場合
MosquittoのMQTTクライアントを使用する例
mosquitto_pub -h 'p2abc6.messaging.internetofthings.ibmcloud.com' -u 'use-token-auth' -P 'mydevicetoken' -i 'd:p2abc6:myDeviceType:mydevice01' -t 'iot-2/evt/start/fmt/json' -m '{"d":{"time":"2017-07-20T11:03:00.000+09:00"}}'
mosquitto_pub -h 'p2abc6.messaging.internetofthings.ibmcloud.com' -u 'use-token-auth' -P 'mydevicetoken' -i 'd:p2abc6:myDeviceType:mydevice01' -t 'iot-2/evt/start/fmt/text' -m '2017-07-20T11:03:00.000+09:00'
Pythonの場合
Pythonにて、paho-mqttを使用する例
pip install paho-mqtt python pub.py
pub.pyの内容:
import paho.mqtt.publish as publish publish.single("iot-2/evt/start/fmt/json", '{"d":"time":"2017-07-20T11:03:00.000+09:00"}}', hostname="p2abc6.messaging.internetofthings.ibmcloud.com", client_id="d:p2abc6:thermostat:mydevice01", auth={"username":"use-token-auth", "password":"mydevicetoken"})
デバイスの実装について
C言語によるMQTT Clientのサンプルは、次に説明があります。
MQTT C Client for Posix and Windows
Watson IoT PlatformのDeviceの作成方法は次に説明があります。
Watson IoT Platform でのデバイスの開発