mosquitto-client + TLS でニフティクラウド IoT デバイスハブの API にアクセスする
タイトルの通り、mosquitto-client + TLS で、ニフティクラウド IoT デバイスハブの API にアクセスしてみました。
環境
- ニフティクラウド Computing + Ubuntu 14.04 サーバー (標準イメージから作成)
準備
まず、mosquitto-client
をインストールします。ドキュメント に書かれてあるコマンドを試すためには、ppa を追加して新しめのバージョンをインストールする必要がありました。
(試行錯誤したせいで install/update/dist-upgrade の順番が変ですが、ご容赦ください。)
# apt-get install -y mosquitto-client
# apt-get install -y software-properties-common
# apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
# apt-get update
# apt-get dist-upgrade -y
mosquitto_pub/mosquitto_sub というコマンドが使えるようになります。
# mosquitto_pub --help | head -2
mosquitto_pub is a simple mqtt client that will publish a message on a single topic and exit.
mosquitto_pub version 1.4.10 running on libmosquitto 1.4.10.
# mosquitto_sub --help | head -2
mosquitto_sub is a simple mqtt client that will subscribe to a single topic and print all messages it receives.
mosquitto_sub version 1.4.10 running on libmosquitto 1.4.10.
次に、IoT デバイスハブは DigiCert の SSL 証明書を利用しているため、DigiCert のルート CA 証明書をダウンロードし、der 形式から mosquitto-client が対応している pem 形式への変換を行います。
# wget https://www.digicert.com/CACerts/DigiCertGlobalRootCA.crt
# openssl x509 -in DigiCertGlobalRootCA.crt -inform der -out DigiCertGlobalRootCA.crt.pem
ここまでできたら準備完了です。
イベント送信
まず、イベント送信をやってみます。
コマンドラインから下記のコマンドを実行します。
(試す際には ${DEVICE_ID}
と ${DEVICE_API_KEY}
を各自のものに置き換えて実行してください。)
# mosquitto_pub \
-d \
-V mqttv311 \
-h iot-device.jp-east-1.mqtt.cloud.nifty.com \
-p 8883 \
--cafile DigiCertGlobalRootCA.crt.pem \
-t /devices/${DEVICE_ID}/event \
-m '{ "eventType": "test", "eventData": { "x": 123 } }' \
-u ${DEVICE_ID} \
-P ${DEVICE_API_KEY} \
-q 1
Client mosqpub/27898-e1iotstgc sending CONNECT
Client mosqpub/27898-e1iotstgc received CONNACK
Client mosqpub/27898-e1iotstgc sending PUBLISH (d0, q1, r0, m1, '/devices/${DEVICE_ID}/event', ... (50 bytes))
Client mosqpub/27898-e1iotstgc received PUBACK (Mid: 1)
Client mosqpub/27898-e1iotstgc sending DISCONNECT
アプリシミュレーターから、イベントが送信されたことが確認できました。
コマンド受信
次にコマンド受信を試してみます。
下記のようなコマンドを実行すると、Subscribed
と表示され、待ち状態になります。
# mosquitto_sub \
-d \
-V mqttv311 \
-h iot-device.jp-east-1.mqtt.cloud.nifty.com \
-p 8883 \
--cafile DigiCertGlobalRootCA.crt.pem \
-t /devices/${DEVICE_ID}/command \
-u ${DEVICE_ID} \
-P ${DEVICE_API_KEY}
Client mosqsub/27811-e1iotstgc sending CONNECT
Client mosqsub/27811-e1iotstgc received CONNACK
Client mosqsub/27811-e1iotstgc sending SUBSCRIBE (Mid: 1, Topic: /devices/${DEVICE_ID}/command, QoS: 0)
Client mosqsub/27811-e1iotstgc received SUBACK
Subscribed (mid: 1): 0
そのままにしておき、アプリシミュレーターからデバイスへコマンドを送信してみます。
待ち状態となっていた mosquitto_sub コマンドに戻ると、下記のようにコマンド受信できていることが確認できました。
Client mosqsub/27811-e1iotstgc received PUBLISH (d0, q0, r0, m0, '/devices/${DEVICE_ID}/command', ... (48 bytes))
{"action":"test","parameters":{"hello":"world"}}
まとめ
mosquitto-client + TLS でニフティクラウド IoT デバイスハブの API にアクセスしてみることができました。
ちょっとした検証等に便利なので、よろしければお試しください。
参考資料
Author And Source
この問題について(mosquitto-client + TLS でニフティクラウド IoT デバイスハブの API にアクセスする), 我々は、より多くの情報をここで見つけました https://qiita.com/tily/items/2d1b7e7abf0c2061ce5d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .