前回で、Raspberry PiからSORACOM SIMを利用してインターネットに接続することが出来ました。最終的には以下の様な構成を構築してみたいと思います。
SORACOMの付加価値部分であるSORACOM Beamを利用してMQTTS経由でBluemixのIoTFの仕組みへデータを送ることを考えます。SORACOM Beamを利用することでデバイス側では、端末情報等の付与やデータの暗号化等をすることなしに安全にデータを転送することが可能です。デバイス側での処理が軽減されるということは現時点では電池の持ちにも繋がりますしなにより設定が簡単になり素晴らしいですね。
- 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 でブラウザから接続をしてみましょう。結構早く動作するように思えます。
パスワードの設定と自動起動
このままでも良いのですが念の為に 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」)を利用します。
IoT Foundation サービスの起動
サービスの追加にて「Internet of Things」を追加します。
次に設定を行います。以下の画面で「Lunch dashboard」をクリックすると、IoTFの管理画面を開くことが出来ます。
IoTFでは、デバイスの管理や認証管理を行うことが出来ます。最終的には以下の様な画面が表示されます。
デバイスの追加(送信準備)
デバイス画面のから画面下部の「デバイスの追加」を選択します。
初めに「デバイスタイプの選択」を行います。これは任意で決めることができるものでテンプレートなどはありませんので自由に作ることが出来ます。初めて実施する場合には「デバイスタイプの作成」を行います。
次にこのデバイスタイプに対してモデルなどの情報を付けることが出来ます。これは管理的なことが目的なので今回は除きます。
あとはディフォルト(何もデータなし)で作成を終えます。
デバイスタイプが作成されていると「デバイスの追加」で選択ができるようになります。今回は先程の「sample-dev」ではなく事前に作成しておいた「SORACOM-beam」デバイスタイプを選択します。
デバイス情報として、デバイスIDを作成します。この値も任意のものとなります。この値もMQTTのデータを送信する時にデバイスタイプと同時に利用します。個別の送信先のデバイスを特定できる名称にしておきます。
セキュリティの項目で「認証トークン」を記述します。指定しないでも自動で作成されますがここでは覚えやすいような値としておきます。
作成が完了すると以下の様な画面が表示されます。この画面は初回しか表示されませんので注意が必要です。もし認証トークンを忘れた場合には再度デバイスを作り直す必要があります。
ここまででMQTTに対してデバイスからデータを送信する準備が出来ました。
APIキーの設定
このAPIキーはMQTTからデータを受信する際に利用します。
APIキーの作成をクリックするとAPIキーが発行されます。
認証トークンも同様に一度しか表示されませんので不明になった場合には再度作成する必要があります。
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の設定は終わりです。デバイスの画面の中で「接続ログ」等が見れるのでエラーの確認の手助けになります。
SORACOM Beam の設定
デバイスからのデータは SORACOM SIM経由で送信することを考えています。この際にSORCOM Beamというサービスを利用することでデータに付加価値を付けることが出来ます。今回はMTQQでデバイスから送信したデータを「暗号化」してみたいと思います。
今回利用するSIMは、グループ「dev」に所属しているとして説明をします。
分かりづらいのですが「dev」をクリックすると詳細が表示されますので「+」でMQTTエントリを追加します。
以下の様な設定を行います。これは先程の「パブリッシュする際の情報」を記入します。
オプションでIMSIの情報をトピックに付与することが出来ます。
- この設定については上手く動作しませんでした。Bluemix側の問題なのかどうか送信するデータの型式に問題があるのかは追えていません。
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側のアプリケーションを作りデータを可視化してみましょう。
送信側のフローの作成
ブラウザからRaspberry Pi上のNode-REDにアクセスします。今回はセンサーデータを使いませんのでInputには「Inject」、Outputには「mqtt」を選択します。送信はSORACMへ送信していますが直接Bluemixに送信する事もできます。
Injectノードの設定
mqttノードの設定
Brockerの設定は先程のSORACMへの送信情報に従い入力します。
受信側のフローの作成
受信は直接Bluemixから受信します。今回は送信したデータを受信しているので同じTopicを参照していますが通常サーバ側からのコマンドを待ち受ける際には別のTopicを指定する必要があります。
mqttノードの設定
ここではTopicにワイルドカードを設定して受信しています。複数のデバイスがある場合には全てのデータを受信することが可能です。
Brockerの設定はBluemixのサブスクライブ登録の情報にしたがいます。
実行結果
このようにデータを受信することが出来ました。SORACOMのコンソールパネルでプロトコルをMQTT(暗号化しない)設定に変更したりなども即座に変更することが出来ます。
まとめ
今回は実際に、SORACOM Beam経由でBluemix にデータを送信してみました。端末の認証をするためにMqttのデータISMI情報を含めてBluemix側のアプリケーションでSORCOM APIを経由してデバイスのチェックを次回はしてみたいところです。デバイス側から見た際に、ユーザの認証情報を含めるひつようがなくまた暗号化もクラウド側で実施するために負荷軽減にもデバイスのセキュリティ面でも良いですね。デバイスが紛失した際にもサーバ側のパスワード情報等は変更する必要がなくSORACOMコンソール側でSIMの停止をすればある程度問題がなさそうです。