本文へジャンプします。

ニフクラ ユーザーガイド

IoTデバイスハブでのMQTT利用

MQTT(MQ Telemetry Transport)は、処理能力の低いデバイスを接続するためのソリューションとして人気を集めているメッセージングプロトコルです。

MQTTは、元々、Pub/Subアーキテクチャに基づく通信用として設計されたものですが、汎用のM2M(Machine to Machine)通信プロトコルとしても使用できます。

IoTデバイスハブは、デバイスの接続のため、REST APIの代わりにMQTT 3.1.1を利用可能です。

MQTTを使用することで、デバイスからのイベント送信やコマンドの受信が可能となります。
MQTTベースで実装されたデバイスがある場合は、簡単にIoTデバイスハブのプロジェクトに統合できます。

制限事項

IoTデバイスハブのMQTT実装は、基本的なIoTユースケースに対応していますが、現状では以下の制限事項があります。

利用可能なMQTTバージョン 3.1.1
利用可能なQoS パブリッシュ QoS0/1
サブスクライブ QoS0
永続セッション ご利用いただけません。
Willトピック
Retain

MQTT接続の実行

MQTTクライアント(デバイス)は、標準のMQTTポート1883か、ポート8883(セキュア接続の場合)で、 ホスト(iot-device.jp-east-1.mqtt.cloud.nifty.com)に接続します。セキュアポートの使用を推奨します。

  • ※一部のMQTTクライアントやライブラリは、サーバーへのTLS接続を行うために使用しているルート証明書を必要とします。 IoTデバイスハブでMQTT接続するために使用するルート証明書は、DigiCertです。

接続が確立されたら、クライアントは次の引数を指定してCONNECTメッセージを発行してください。

clientId 空白
cleanSession true
username デバイスID
password デバイスに発行されたAPIキー

メッセージが成功したら、クライアントはIoTデバイスハブからメッセージを受信するためのセットアップに進みます。

コマンドの受信

デバイスをターゲットにしたコマンドを受信するには、クライアントは、Subscribeメッセージを使って適切なトピックをサブスクライブする必要があります。

topicName /devices/DEVICE_ID/command 形式
DEVICE_IDは、割り当てられたデバイスIDです。
payload IoTデバイスハブのスキーマでデバイスコマンドオブジェクトに対して定義されているJSON文字列
qos 0

Subscribeメッセージが成功した場合、クライアントは、デバイスに対してコマンドが発行されるたびに、Publishメッセージを受信します。

Mosquittoには、MQTTをテストするときに便利なコマンドラインプログラムがいくつかあります。

次の例では、mosquitto_subを使用して着信コマンドをリッスンし、画面にJSON文字列を出力しています。
(DEVICE_IDとDEVICE_API_KEYは実際のデバイスIDとAPIキーに置き換えてください)

$ mosquitto_sub -d -V mqttv311 -h iot-device.jp-east-1.mqtt.cloud.nifty.com -t /devices/DEVICE_ID/command -u DEVICE_ID -P DEVICE_API_KEY

イベントの送信

IoTデバイスハブにイベントを送信するには、次の引数を指定してクライアントからPublishメッセージを送信します。

topicName /devices/DEVICE_ID/event 形式
DEVICE_IDは、割り当てられたデバイスIDです。
payload IoTデバイスハブのスキーマでイベントオブジェクトに対して定義されているJSON文字列
qos 0/1

次の例では、mosquitto_pubを使用してQoS1でIoTデバイスハブにイベントを送信しています。
(DEVICE_IDとDEVICE_API_KEYは実際のデバイスIDとAPIキーに置き換えてください)

$ mosquitto_pub -d -V mqttv311 -h iot-device.jp-east-1.mqtt.cloud.nifty.com -t /devices/DEVICE_ID/event -m '{ "eventType": "test", "eventData": { "x": 123 } }' -u DEVICE_ID -P DEVICE_API_KEY -q 1

正常な切断

デバイスが、イベントを送信したりコマンドを受信したりする必要がなくなった場合は、MQTTサーバーから切断することを推奨します。

クライアントからUNSUBSCRIBEメッセージを発行してサブスクリプションをすべて停止してから、DISCONNECTメッセージを発行してセッションを正しく終了してください。

推奨画面サイズ 1024×768 以上