以前のブログエントリで、IBM IoT Foundations から提供されているオンライン IoT シミュレータを紹介しました:
センサー付き IoT シミュレータ


MAC アドレスを持つセンサー付き IoT デバイスがソフトウェアでシミュレートされていて、温度や湿度などの情報を任意値に変えることができ、かつ MAC アドレスを通じてそれらの値を取得することができるようになっている、というものです。

今日はこのシミュレータを使って IoT のリアルタイムアプリケーション・・・と呼んでいいのかどうか微妙ですが、IoT リアルタイムアプリケーションの前段階になるようなフローチャートを、IBM Bluemix の Node-RED サービスを使って作成する、という手順を紹介します。 前半の今回は Node-RED サービスと IoT センサーシミュレータが接続できる確認までを、次回はもう少しワークフローっぽい内容のアプリケーションを実際に作るサンプルを紹介します。


では最初に Node-RED について簡単に紹介します。Node-RED は IBM Emerging Technology が作成したオープンソースツールです。入力/出力/処理といった様々な種類のブロックを組み合わせるだけでワークフローを作ることができるツールで、その入力は各種デバイスであったりネットサービスであったり、出力結果はデータストアであったりウェブサービスであったりします。独自に開発するコードを使わない場合であれば、ほぼコーディングは不要です。Node-RED 自体は IoT 専用のツールではないのですが、IoT 向けのアプリケーションを非常に簡単に作ることができます。この辺りは「論より証拠」なので、早速使ってみましょう。


まず接続する IoT センサーシミュレータの情報を確認しておきます。「センサー付き IoT シミュレータ」にアクセスして、横スワイプで Object Temperature(機器温度)の画面に切り替えます(この画面では初期値が 24 度になっていることが確認できます)。同時に画面右上部の MAC アドレスをメモしておきます。今からこの仮想センサーの機器温度の値を取得するアプリケーションを Node-RED を使って作成します:
2015032019


Node-RED の環境を簡単に準備するために IBM Bluemix のボイラープレート(テンプレート)機能を使います。まず IBM Bluemix にログインして、「カタログ」の「ボイラープレート」カテゴリから、「Node RED Starter」を選択します。このボイラープレートを選択することで、初期データストア機能まで含めた Node-RED 環境を簡単に構築できます:
2015032001


Node-RED Starter の設定画面です。設定といっても注意すべきはアプリケーションの名前くらいです。インターネット上のホスト名として重複のない名前(この例では自分の ID を使って dotnsf-nodered という名前を指定することで重複を避けています)を入力し、「作成」ボタンをクリックします:
2015032002


Node-RED Starter ボイラープレートを使ったアプリケーションの起動が開始されます。ここで一度ダッシュボードに戻ります:
2015032003


しばらく待つとアプリケーションサーバーと各種サービスが全て起動し、作成したアプリケーション(この例では dotnsf-nodered)が「実行中」というステータスになります。この時点で Node-RED エディタが使えるようになっています:
2015032004


実際に Node-RED エディタを使ってみましょう。ダッシュボードでアプリケーションを選択後、アプリケーションが起動していることを確認したら「経路」と書かれた箇所に表示されているリンクをクリックして、Node-RED アプリケーションにアクセスします:
2015032005


このような Node-RED の初期画面が表示されるはずです。画面下部の "Go to your Node RED flow editor" と書かれたボタンをクリックします:
2015032006


Node-RED エディタ画面が表示されます。環境によっては初期状態でなんらかのブロックが画面中央のキャンバス設置されていることがあるかもしれませんが、一旦全て削除(マウスでクリックして DEL キー)して、キャンバスを空の状態にしておきます:
2015032007


ではこの状態から、IoT センサー(シミュレーター)の機器温度値を取得して表示する、というアプリケーションを作ってみます。画面左ペインの input カテゴリから "ibmiot" と書かれたブロックをドラッグ&ドロップしてキャンバス内に配置します。このブロックが「IoT 機器からの入力」と意味するブロックになります:
2015032008


"ibmiot" ブロックがキャンバス内に配置されました。同時に画面右ペインの info タブ内にこの "ibmiot" ブロックに関する属性が表示されます:
2015032009


配置された "ibmiot" ブロックをダブルクリックすると、この "ibmiot" ブロックの属性値を変更する画面が表示されます。このブロックを IoT センサーシミュレータとするために、以下の値を入力します:
 Authentication: "Quickstart"
 Input Type: "Device Event"
 Device Id: IoT センサーシミュレータに表示されていた MAC アドレス(英字は全て小文字、コロンなし)
 Name: "IoT Sensor"(表示上の名前なのでなんでも可)
最後に OK ボタンをクリックして、この編集画面を終了します。これで MAC アドレスの値が間違っていなければ、このブロックは IoT センサーシミュレータをエミュレートしていることになり、センサーの値が取得できるようになりました:
2015032010


次に画面左ペインの output カテゴリから "debug" と書かれたブロックをキャンバス内にドラッグ&ドロップします:
2015032011


続けて "ibmiot" ブロックから "debug" ブロックに向けてマウスをドラッグします:
2015032012


するとこの2つのブロックの間が線で繋がり、下図のような状態になります:
2015032013


ここで "debug" ブロックをダブルクリックして属性を確認します(以下のデフォルト値のまま変更する必要はありません、この内容になっていることを確認して OK ボタンをクリックしてください)。これでこのブロックは入力値として入ってくるデータの中の msg.payload の値を debug タブに出力する、という処理を行うブロックになりました:
2015032014


ここまでの作業でどのようなワークフローになるか、一度実行して確認してみましょう。画面右ペインを "debug" にした上で、右上の "Deploy" ボタンをクリックします:
2015032015


画面上部に "Successfully deployed" と表示されれば、このワークフローが正しくデプロイされて稼働したことを意味します:
2015032016


しばらくすると画面右ペインの "debug" タブに値が JSON テキストが2秒おきに表示されはじめます。これが IoT センサーシミュレータから得られた msg.payload の値です(d.objectTemp の値が 24 になっていることを確認してください。IoT センサーシミュレータで設定されている Object Tempreture の値と同じです):
2015032018


ではこの状態で IoT センサーシミュレータの機器温度を変更してみます。矢印ボタンを何度かクリックして機器温度を別の値に(下図では 41 度に)変更します:
2015032020


その直後から Node-RED エディタ内の debug タブに表示される値の d.objectTemp の値も 24 から 41 に変わるはずです(画面ではその途中の 36 度の時の値も表示されています):
2015032021


つまり、この Node-RED キャンバス内に配置された "ibmiot" ブロックは(MAC アドレスを指定しただけですが)IoT センサーシミュレータのデバイスをシミュレートして動いていることが分かりました。そしてこのデバイスから送られてくるセンサーからの入力値は debug ブロックによって正しく出力できていることもわかりました。

とりあえず前半はここまで。Node-RED エディタを使って IoT 機器(シミュレータ)からセンサーの値を取得して表示する、というシンプルなワークフローを作ることができました。次回はもう少し複雑なワークフロー処理を実現する予定です。