前回で、Raspberry PiからSORACOM SIMを利用してインターネットに接続することが出来ました。最終的には以下の様な構成を構築してみたいと思います。

SORACOMの付加価値部分であるSORACOM Beamを利用してMQTTS経由でBluemixのIoTFの仕組みへデータを送ることを考えます。SORACOM Beamを利用することでデバイス側では、端末情報等の付与やデータの暗号化等をすることなしに安全にデータを転送することが可能です。デバイス側での処理が軽減されるということは現時点では電池の持ちにも繋がりますしなにより設定が簡単になり素晴らしいですね。

NewImage

  • BeamにてISMIの情報を付与するとで「データ処理」部分でデバイスの認証を行うことが可能になります。従来これらの情報は何らかの端末情報とその管理が必要となりましたがBeamを利用することでこの部分がサービスとして利用可能になります。
  • 今回の記事ではSORACOM BeamにてMQTTのデータに対してデバイス情報(ISMI)の付与を考えていましたが現在まだ上手く送信できていません(Bluemix側で「The topic is not valid.」と表示されてしまう)

Raspberry Pi に Node-RED の導入

個別にRaspberry Pi上でプログラムを記述することも手間ではありませんが今回はなるべくビジュアルプログラムを利用して行きたいと思います。(単純にMQTTで送信したいのであれば apt-get install mosquitto_clients を実施して、mosquitto_pub , mosquitto_sub を利用するのがシンプルです)

以下の記事が参考になります。

例に習いたまには rpi-updade; reboot しておきましょう。

手順に従い進めます。

nodejsの導入

curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs

バージョンを確認しておきます。

$ node -v
v0.10.40

Node-RED の導入

こちらはもう通常のサーバへの導入法と同じです

sudo npm install -g node-red

実行するのは node-red-pi コマンドで行います。

node-red-pi --max-old-space-size=128

ローカルのポート 1880 で起動しているので http://”pi address”:1880 でブラウザから接続をしてみましょう。結構早く動作するように思えます。

NewImage

パスワードの設定と自動起動

このままでも良いのですが念の為に Node-REDエディタに入るためにパスワードを設定しましょう。

cp /usr/lib/node_modules/node-red/settings.js ~/.node-red/
sed -ri 's\//httpAdminAuth\httpAdminAuth\g' /root/.node-red/settings.js  #default "user"'s password "p

起動にはPm2を利用します

sudo npm install -g pm2
sudo pm2 start /usr/bin/node-red 
sudo pm2 show 0

これでRaspberry Piの情報を簡単にGUI操作でMQTTにつなぐ準備が出来ました。実際にはセンサーなどの情報を取得するためにnodeを追加する必要があります。

Bluemix Internet of Things Foundation の設定

以下の設定はSORACOMの公式ブログを参考に実施ていますので不明な点があれば合わせて参照して下さい。

BluemixのサインアップからIoTFの起動の仕方は別途ググッて貰えばよいかと思います。今回は単純なNodeアプリケーション(ボイラーテンプレート「Internet of Things Foundation Starter」)を利用します。

NewImage

IoT Foundation サービスの起動

サービスの追加にて「Internet of Things」を追加します。

NewImage

次に設定を行います。以下の画面で「Lunch dashboard」をクリックすると、IoTFの管理画面を開くことが出来ます。

NewImage

IoTFでは、デバイスの管理や認証管理を行うことが出来ます。最終的には以下の様な画面が表示されます。

NewImage

デバイスの追加(送信準備)

デバイス画面のから画面下部の「デバイスの追加」を選択します。

NewImage

初めに「デバイスタイプの選択」を行います。これは任意で決めることができるものでテンプレートなどはありませんので自由に作ることが出来ます。初めて実施する場合には「デバイスタイプの作成」を行います。

NewImage

次にこのデバイスタイプに対してモデルなどの情報を付けることが出来ます。これは管理的なことが目的なので今回は除きます。

NewImage

あとはディフォルト(何もデータなし)で作成を終えます。

デバイスタイプが作成されていると「デバイスの追加」で選択ができるようになります。今回は先程の「sample-dev」ではなく事前に作成しておいた「SORACOM-beam」デバイスタイプを選択します。

デバイス情報として、デバイスIDを作成します。この値も任意のものとなります。この値もMQTTのデータを送信する時にデバイスタイプと同時に利用します。個別の送信先のデバイスを特定できる名称にしておきます。

NewImage

セキュリティの項目で「認証トークン」を記述します。指定しないでも自動で作成されますがここでは覚えやすいような値としておきます。

NewImage

作成が完了すると以下の様な画面が表示されます。この画面は初回しか表示されませんので注意が必要です。もし認証トークンを忘れた場合には再度デバイスを作り直す必要があります。

IBM Internet of Things Foundation

ここまででMQTTに対してデバイスからデータを送信する準備が出来ました。

APIキーの設定

このAPIキーはMQTTからデータを受信する際に利用します。

IBM Internet of Things Foundation

APIキーの作成をクリックするとAPIキーが発行されます。

IBM Internet of Things Foundation

認証トークンも同様に一度しか表示されませんので不明になった場合には再度作成する必要があります。

Bluemix側のIoTFの情報

パブリッシュする際の情報

  • Blocker:「組織ID」.messaging.internetofthings.ibmcloud.com:1883
  • Client ID : d:「組織ID」:「デバイスタイプ」:「デバイスID」
  • username : use-token-auth
  • Password : 「デバイスの認証トークン」

サブスクライブする際の情報

  • Blocker : 「組織ID」.messaging.internetofthings.ibmcloud.com:1883
  • Client ID : a:「組織ID」:「デバイスタイプ」:「デバイスID」
  • username : 「APIキー」
  • Password : 「APIキーの認証トークン」

となります。これでBluemix側でのMQTTの設定は終わりです。デバイスの画面の中で「接続ログ」等が見れるのでエラーの確認の手助けになります。

NewImage

SORACOM Beam の設定

デバイスからのデータは SORACOM SIM経由で送信することを考えています。この際にSORCOM Beamというサービスを利用することでデータに付加価値を付けることが出来ます。今回はMTQQでデバイスから送信したデータを「暗号化」してみたいと思います。

今回利用するSIMは、グループ「dev」に所属しているとして説明をします。

SORACOM ユーザーコンソール

分かりづらいのですが「dev」をクリックすると詳細が表示されますので「+」でMQTTエントリを追加します。

NewImage

以下の様な設定を行います。これは先程の「パブリッシュする際の情報」を記入します。

SORACOM ユーザーコンソール

オプションでIMSIの情報をトピックに付与することが出来ます。

NewImage

  • この設定については上手く動作しませんでした。Bluemix側の問題なのかどうか送信するデータの型式に問題があるのかは追えていません。

SORACOM ユーザーコンソール

SORACOM側のIoTFの情報

パブリッシュする際の情報

  • Blocker:beam.soracom.io:1883
  • Client ID : d:「組織ID」:「デバイスタイプ」:「デバイスID」
  • username : なし
  • Password : なし

ClientIDはそのままBluemixに送られるのでClientIDについては同様のものを利用します。SORACOM Beamでは、SORACOM AIR側からの通信しか受信しないために認証情報などはなしで利用することが出来ます。

Raspberry Piからの送受信

今回は簡易的に、Raspberry Piからデータを送信し、Raspberry Piでデータを受信してみたいと思います。送信にはMQTTプロトコルを利用して、SORACOM Beam経由でBluemix IOTFで行います。次回には、Bluemix側のアプリケーションを作りデータを可視化してみましょう。

NewImage

送信側のフローの作成

ブラウザからRaspberry Pi上のNode-REDにアクセスします。今回はセンサーデータを使いませんのでInputには「Inject」、Outputには「mqtt」を選択します。送信はSORACMへ送信していますが直接Bluemixに送信する事もできます。

NewImage

Injectノードの設定

NewImage

mqttノードの設定

Node RED 192 168 0 22

Brockerの設定は先程のSORACMへの送信情報に従い入力します。

Node RED 192 168 0 22

受信側のフローの作成

受信は直接Bluemixから受信します。今回は送信したデータを受信しているので同じTopicを参照していますが通常サーバ側からのコマンドを待ち受ける際には別のTopicを指定する必要があります。

NewImage

mqttノードの設定

ここではTopicにワイルドカードを設定して受信しています。複数のデバイスがある場合には全てのデータを受信することが可能です。

Node RED 192 168 0 22

Brockerの設定はBluemixのサブスクライブ登録の情報にしたがいます。

Node RED 192 168 0 22

実行結果

NewImage

このようにデータを受信することが出来ました。SORACOMのコンソールパネルでプロトコルをMQTT(暗号化しない)設定に変更したりなども即座に変更することが出来ます。

まとめ

今回は実際に、SORACOM Beam経由でBluemix にデータを送信してみました。端末の認証をするためにMqttのデータISMI情報を含めてBluemix側のアプリケーションでSORCOM APIを経由してデバイスのチェックを次回はしてみたいところです。デバイス側から見た際に、ユーザの認証情報を含めるひつようがなくまた暗号化もクラウド側で実施するために負荷軽減にもデバイスのセキュリティ面でも良いですね。デバイスが紛失した際にもサーバ側のパスワード情報等は変更する必要がなくSORACOMコンソール側でSIMの停止をすればある程度問題がなさそうです。

参考

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に格納したデータを可視化