SORACOM Beam からMQTTプロトコルでIMSIを付与してデータを送信してみたいと思います。

SORACOM Beam からの送信データの確認

MQTTサーバの導入はこちらの記事を参考にします

SORACOM BeamであたらいいMQTTエンドポイントを定義しましょう。

SORACOM ユーザーコンソール

  • ホスト名にはSoftLayerの仮想サーバのパブリックIPアドレスを記入
  • エンドポイントを複数設定できるとありがたいですね(一般的に必要なのかは不明ですが)

この状態で送信して確認してみました。

IMSIを付与しない場合

d:urf054:SORACOM-beam:test (d0, q0, r0, m0, 'iot-2/evt/test/fmt/json', ... (32 bytes))

IMSIを付与する場合

d:urf054:SORACOM-beam:test (d0, q0, r0, m0, 'iot-2/evt/test/fmt/json/4401031448xxxxxxx', ... (32 bytes))

というように「トピック」の最後にIMSI番号が付与されています。(確かにSORACOM Beamの設定に書かれている通りになっていますね)

Bluemix IoTFでの確認

ここでBluemixの仕様を見てみると(最初から読めという話だが)

    パブリッシュ先トピック iot-2/evt/event_id/fmt/format_string
  • (https://docs.internetofthings.ibmcloud.com/ja/messaging/devices.html)

と記載されています。送信する際に fmt/「json」 としていたのですがこの状態では fmt/json/44xxxx となり format errorとなっていた模様です。したがって送信する際に fmt までに変更することでBluemix側で受信することができるようになりました。

Node RED 192 168 0 22

これで実際に Node-RED の Debug メッセージを見ていると

Node RED 192 168 0 22

確かにそのようになっていますね。

まとめ

SORACOM Beam 経由でBluemix IoTFに送信する際には、「format_string」にIMSIが付与されるのでパブリッシュする際には トピック「iot-2/evt/event_id/fmt」で送信する事。

(サービス仕様をよく読めと)

ところでPython等のMqttライブラリから操作していれば後は処理が出来たのですが、Node-REDの知識が少なくトピック名称をどの様にJavascriptで取得して良いのか調べないといけなくなりました。一旦取得できれば SORACM APIをで get /subscribers/{imsi} で存在確認ができるので適切なものかが確認できますね。

漠然と実際に1データ毎に、確認すればよいかと思っていましたが実際それはトラフィック多すぎになりますよね。{imsi}の情報が付与されており、beams.soracom.comから送信されている時点でOKとすべきなのだろうか。

Raspberry Pi + SORACOM + Bluemix のIoTデモ環境構築

  1. Raspberry Pi + L-03D + SORACOM SIM で通信を行う
  2. Raspberry PiからSORACOM Beam経由でBluemixのMQTTへデータ送信を行う
  3. Raspberry PiのLEDを Node-RED を使ってLチカする
  4. SORACOM Beam を利用してMQTTプロトコル経由でIMSI情報を付与してみる
  5. MQTT経由のデータをSORACOM APIでSIM単位の認証/受信したデータをCloudantに格納
  6. Cloudantに格納したデータを可視化