第1部 Node-REDを使用してIoTアプリを簡単に作ってみる
Node-REDとは
Node-REDは、IBM英国Hursley研究所が開発したソフトウェアで、IoTデバイス、API、オンラインサービスを連携させるための開発用ツールです。ブラウザUIベースでビジュアルにモデルを作成でき、作成したモデルをすぐに動かしてみることができます。Node-REDはオープンソースとして提供されており、GitHubからソースを取得することができます。
Node-REDはNode.jsが動作する環境で利用できますが、この連載ではセットアップが簡単なNode-RED for Bluemixを用います。
なお、Node-REDは現在のところアイデアを手軽に試してみるようなケース(プロトタイピング)を想定しており、そのまま本番環境で利用するようなケースは想定していません。Bluemix上でもベータの扱いになっていて、突然使用できなくなる可能性がありますので注意してください。
開発・テスト手順解説の前提事項
これから説明する手順は、以下を前提としています。
- 今回の開発には、Macを使用しています
- IBM ID取得済み、Bluemixにサインアップ済みの前提とします
- mbedにアプリケーション・ボードを装着済みとします
- mbedのクライアントサイドアプリは第2回でインストールしたものを使います
- mbedがBluemixに接続するためのネットワーク環境(ルーター、LANケーブル)が必要です
今回のアプリケーション概要
第2回では、IBM Internet of Things Foundationの認証不要なQuickstartサービスを用いて、mbedからMQTTで送信されたセンサーデータをQuickstartで表示できることを確認しました。今回はセンサーデータをBluemixへ送信し、Bluemix上のサービスやアプリケーションで処理を行えるようにします。
また手順の解説ではBluemixの古い方のWeb画面を使用します。もしもTry the new Bluemixのリンクをクリックしてしまい、新しいWeb画面になってしまった方は、画面上部にある「クラシック・エクスペリエンスに進む」をクリックすると元の古いWeb画面に戻すことができます。
BluemixのNode-REDでアプリケーションを作成する
BluemixにIBM IDでログインします。
ログイン後のダッシュボードで右上の人型アイコンをクリックし、「地域」を「米国南部」に設定してください(図1)。
スペースが未作成の場合は、任意の名前でスペースを作成しましょう(この手順では「dev」とします)。
アプリケーションを作成します。「カタログ」から「Internet of Things Platform Starter(モノのインターネット・スターター・ボイラープレート)(図2)」を選択すると、IoTアプリの開発環境が作成されます。
アプリケーションに任意の名前を付けましょう(手順では「iotmytestapp」とします)。
アプリケーションが稼働中になったら「経路」の右横に表示されたURLがクリック可能となりますので、クリックしてみましょう(図3)。
Node-REDのスタートアップがブラウザに表示されます。赤色の「Go to your Node-RED flow editor」をクリックしてください(図4)。
フロー・エディターのワークスペースには、あらかじめサンプルのフローが作られた状態となっています(図5)。
試しにワークスペースの一番左に配置された「IBM IoT APP In」ノードをダブルクリックしてみてください。プロパティの確認や変更が可能な構成ダイアログが表示されます。「IBM IoT APP In」ノードは、連載第2回でもご紹介したIBM Internet of Things Foundationの「Quickstart」サービスから、デバイスのイベントデータをフローへ入力する責務を持ちます。
そのほかのノードのプロパティも確認してみましょう。サンプルフローの各ノードの責務は表1のとおりです。
ノード名 | 責務 |
---|---|
IBM IoT APP In | IBM IoT Foundationからデバイスのイベントデータをサブスクライブする |
device data | フロー・エディターのdebugタブにデバッグメッセージとしてデバイスデータを出力する |
temp | メッセージペイロードのJSONデータからtemp(温度)属性のみを取り出して返す |
temp thresh | メッセージペイロードが40度以下なら1番目のフローに進み、40度より上なら2番目のフローに進む |
safe | Temperature(温度)が安全な閾値の範囲内にあるというメッセージを出力する |
danger | Temperature(温度)が危険な閾値の範囲内にある(安全な閾値の範囲外)というメッセージを出力する |
cpu status | CPUの温度の状態をデバッグメッセージとして出力する(このサンプルでは、CPUの温度がイベントとして上がってきていると想定しています) |
各ノードの責務およびデータフロー(ノードの繋がり)を確認することにより、このサンプルフローは、デバイスから送信される温度のデータをもとに、CPUの状態が安全か危険かを判定して通知するIoTサービスを実現しようとしていることが分かります。
このように、Node-REDでは、ブラウザUIベースのワークスペース上でさまざまなノード(カプセル化された小さな機能)を繋げることによってアプリケーションを構築します。要件によっては、ほぼノンコーディングで作成することができますし、JavaScriptで自作した機能や他者が提供するAPIやサービスと連係させてカスタマイズできます。
作成したデータ・フローのモデルは、デプロイすれば動作を確認することができるので、Node-RED for Bluemixは、IoTアプリケーションのプロトタイプ構築に最適なソリューションの一つと言えるでしょう。
次に、IoTのサンプルフローに少し定義を加えて、実際に動作を確認してみましょう。
「IBM IoT App In」ノードに「Quickstart」サービスからデータ入力できるようにします。IoT Sensorシミュレーターをブラウザの新たなタブに表示させてください。シミュレーターに表示された右上の英数字がデバイスIDです。この値をコピーするか控えておいてください(図6)。
Node-REDのフロー・エディターに戻り、「IBM IoT App In」ノードの「Device Id」に控えておいた値を入力して「Ok」をクリックします(図7)。
変更が加わったので、画面右上にある「Deploy」が赤色になりました。「Deploy」をクリックしてみましょう(図8)。
「Successfully Deployed」という通知が表示されたらデプロイ完了です。フローエディタの右にあるデバッグコンソールに、図9のようなメッセージが出力されましたか?
2秒おきにシミュレーターのイベントが実行され、Bluemixのアプリケーションがシミュレーターのセンサーデータを入力処理します。「temp thresh」ノードでは温度の閾値判定が行われ、その判定結果がデバッグメッセージとして出力されます。
デバッグコンソールには、シミュレーターからの入力データもデバッグ用途で出力されていることが分かります。
シミュレーターの下部に表示された矢印をクリックすると温度を上下できるので、40度以下の温度、また41度以上の温度に変更してみましょう。デバッグコンソールに表示される判定結果の内容が変わりましたか?
サンプルフローの動作確認が終わったら、「IBM IoT App In」ノードの「Device Id」の値を削除して再びデプロイしましょう。これでシミュレーターのイベントデータのサブスクライブを止めることができます。デバッグコンソールに「Device Id is not set for Quickstart flow」というメッセージが出力された後は、何も出力されないことを確認してください。