IBM BluemixでエアコンのデータをJSONで受け取り条件分岐の処理をつくってみた

2015年6月11日にコワーキングスペース茅場町で開催された「IBM Bluemix:IoTって何? IoTプログラミング体験」という勉強会に参加してきました。

その記事はこちら↓

【動画あり】デバイスやビッグデータと設備機器がBluemixとKNX/DALIでつながる可能性を感じた! | 日本ピー・アイ株式会社

今回の勉強会はハンズオン形式でおこなわれたのですが、後からもう一度やるときに参考になるように、スクリーンショットをとっておきましたので記事として公開します。

まずはBluemixからアプリケーションの作成

このハンズオンでは事前にBluemixのアカウントが必要なので30日間の無料アカウントを作っておく必要があります。

http://ibm.biz/bluemixfree

アカウントにログインした状態でまずはアプリの作成。

bluemix

アプリの種類について「Web」と「モバイル」の選択を迫られるので、「Web」を選択。

ダッシュボード IBM Bluemix

JavaやNode.js、PHPやPythonなど、何で作成するかを選択します。今回は「ボイラープレートの参照」を選択。

ダッシュボード IBM Bluemix

すると右下にボタンが表示されるので、これをクリック。

ダッシュボード IBM Bluemix

次に、このようになるので、「Internet of Things Foundation Starter」を選択。

カタログ IBM Bluemix

アプリの作成フォームに、名前を入力します。この名前がホスト名となりアプリのURLとなります。

Internet of Things Foundation Starter IBM Bluemix

作成ボタンを押すと、「アプリケーションをステージングしています」の表示。これはしばらく時間がかかります。

ダッシュボード IBM Bluemix

しばらく待つと、このように「アプリは稼働しています」との表示になります。

ダッシュボード IBM Bluemix

仮想のエアコンを作る

このハンズオンでは、仮想のエアコンから出力される温度や湿度などのデータをBluemixで作成したアプリケーションで受け取るようにするのですが、その仮想のエアコンを作成します。

まずは、このリンクをクリック。ちなみに、Bluemixのアカウントをもっていて、アプリを稼働していないと何も起こりません。

https://quickstart.internetofthings.ibmcloud.com/iotsensor/

正しくアプリが動いていれば、こんなふうな画面が表示されます。こちら、Temperatureが16℃ということです。下にある矢印で自由に温度を上げたり下げたりすることができます。

IoT Sensor

こちらの上にエミュレートされたMACアドレスが表示されるのですが、これは後で利用します。ただし、間のコロンは取り除き全部小文字にする必要があります。わざわざ書き換える必要はなく、このMACアドレスをクリックすれば、画面がかわり、そこのURLにMACアドレスが全部小文字&コロンがなくなったものが表示されるので、それをコピーしておきましょう。

IoT Sensor

Node-RED flow editor

こちらの画面にて、「Go to your Node-RED flow editor」をクリック

Node RED in Bluemix for IBM Internet of Things Foundation

こんな風にNode Editorが開きます。

Node RED naka 20150610 001 mybluemix net

左の方に並んでいるのが「ノード」、右側の白いところを「キャンパス」といいます。

一番最初に、サンプルのノードが並んでいるのですが、今回のハンズオンでは、まずはこれを全部選択して削除し、白紙の状態から作成しました。

Node RED naka 20150610 001 mybluemix net

作成するにあたって、Input、Outoputなどグループごとにわかれているノードの中からノードをドラッグしてキャンパスに移動、そのノードをダブルクリックするとプロパティを変更することができます。

最初につかったノードは、Inputにある「ibmiot」です。先ほどのエアコンのエミュレートされたMACアドレスの、全部小文字、コロンを削除したものをDevice Idに入力します。

Node RED naka 20150610 001 mybluemix net

次に、Outputにある「debug」のノードをドラッグして、先ほどのibmiotのノードと線をつなぎます。

Node RED naka 20150610 001 mybluemix net

ここまでできたら、右上にある「Deploy」ボタンを押しアプリを稼働させます。

Node RED naka 20150610 001 mybluemix net と Untitled

つぎに、「Deploy」ボタンの下にあるタブを「debug」にすると、ibmiotノードが吐き出すデータが表示されます。データはJSONです。

Node RED naka 20150610 001 mybluemix net

これ、一度Deployさせると2秒に1回データを取得してdebugに表示されるので、止めたいときはdebugノードをクリックしてボタンを出してここをまたクリック。すると、データの取得が中止されます。

Node RED naka 20150610 001 mybluemix net

さらに、debugノードをダブルクリックするとこのような画面になります。現在はOutputのところがmessage propertyでmsg.payloadとなっています。

Node RED naka 20150610 001 mybluemix net

このOutputをComplete msg objectにすると、ibmiotから出されているデータの全てをdebugタブに表示することができます。

Node RED naka 20150610 001 mybluemix net

そのデータがこちらです。

Node RED naka 20150610 001 mybluemix net

以上で、仮想のエアコンから出力されるデータをひととおりノードエディタのdebug画面で表示させることができました。

payloadのデータの温度データだけを取り出し、ある温度を超えたらアラートを出す

次に、このデータの値による条件分岐を加えたアプリケーションを作成します。内容としては、payloadのデータの温度データだけを取り出し、ある温度を超えたらアラートを出すというものです。

まずはfunctionというノードを選択してキャンパスに移します。

Node RED naka 20150610 001 mybluemix net

このfunctionノードをクリックするとコードを書くことができるので、JavaScriptでpayloadの温度データを取得してreturnするという処理を書きます。

Node RED naka 20150610 001 mybluemix net

functionノードからdebugノードにつなぎ出力されるデータをdebugで確認できるようにします。

Node RED naka 20150610 001 mybluemix net

deployボタンを押してアプリを稼働させ、debugタブに下図のようにデータが表示されればOKです。

Node RED naka 20150610 001 mybluemix net と Preview of Untitled

次に、40度以上と以下とで条件分岐の処理をつくります。条件分岐をつくるには、functionタブにあるswitchノードを利用します。

Node RED naka 20150610 001 mybluemix net

switchノードには2つの出力があります。switchノードをクリックして、条件を入力。40度以上は1から出力、40度以下は2から出力するようにします。

Node RED naka 20150610 001 mybluemix net

次にTemplateノードをドラッグします。

Node RED naka 20150610 001 mybluemix net

このTemplatノードでは、switchノードからの出力を指定した文字列に変換します。

出力1につないだTemplateノードには”セーフ”を設定。

Node RED naka 20150610 001 mybluemix net

出力2につないだTemplateノードには、”危機”を設定します。

Node RED naka 20150610 001 mybluemix net

最後にdebugノードをつなぎ、全体の接続はこんな感じ。

Node RED naka 20150610 001 mybluemix net

deployで実行させます。

Node RED naka 20150610 001 mybluemix net

これで、無事に仮想温度計から取得したデータを判断してメッセージを出す処理を作ることができました。