mqtt
IoT
wiotp

Watson IoT PlatformにDeviceを接続する際の設定

初めて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と比較すると、セキュリティを確保するために、次の仕組みが構築されています。
1. デバイスからデバイスに直接メッセージを送信できない。
2. デバイスとアプリケーションは直接メッセージを送受信できる。
3. デバイスからデバイスにメッセージを送りたい場合は、一度、アプリケーションを経由する。
この仕組みは下記にて説明があります。
IoT デバイス間のデータ・リークを回避する方法
この仕組みは、MQTTのClient IdentifierやTopicに規則を設けて実現しています。

  1. Watson IoT Platformに接続されるものは、タイプがある。デバイスかアプリケーション。
  2. メッセージにはタイプがある。event、command、statusなど。
  3. デバイスからアプリケーションに送信されるメッセージは、eventとstatusタイプのみ。
  4. デバイスはeventタイプのメッセージは送信できるが、受信はできない。
  5. アプリケーションからデバイスに送信されるメッセージは、event、command、statusタイプ。
  6. これらの通信は、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 でのデバイスの開発