enebuler X MotionBoard による、IoT リアルタイムモニタリング

伊那市ハッカソンにて MotionBoarad デビュー

みなさん、こんにちは。集合写真家の武市です。
第二回伊那市LoRaWANハッカソンでは、島澤甲プロデュースによる、IoTの為のリアルタイム分析、モニタリングツールであるMotionBoard (ウイングアーク1st株式会社) が提供されることになりました。

ウイングアーク1st株式会社
CTO 島澤甲

記事などで見たことがある方もいらっしゃるかと思いますが、島澤の自宅の部屋は以下のような、ハードと見える化の集大成となっていて、これだけギークな島澤が創る MotionBoard が IoTに向いていないわけがなく、多くのこだわりが簡単に利用できるよう作り込まれています。



MotionBoard と enebuler で 可視化

さて、MotionBoard の IoT 向けの特性と特徴についての概要は こちら のページを見て頂くとして、今回のハッカソンでの利用方法について早速まとめてみたいと思います。

今回の構成は、他のソリューションと同様に、ebebulerを通じてデータを受信して可視化、分析を行います。


MotionBoard によるデータの可視化については、主に以下の3つの方式があります。
enebuler経由のデータの取り込み方としては、以下の2つの方法が効率良いでしょう。

1. enebuler → データベース → MotionBoard
2. enebuler → MB node → MotionBoard



1. enebuler → データベース → MotionBoard

こちらについては、クラウド上にアクセスが可能なデータベースを作成する必要があります。AWSやAzureのアカウントでデータベースをお試しで作成することができますのでそれらを利用すると良いでしょう。MotionBoard と外部データベースの接続については、こちらをご参照ください。

2. enebuler → MB node → MotionBoard

次に、MB node を利用した接続方法です。こちらは Node-Red のポータルに公開されているノードを利用します。

https://flows.nodered.org/node/node-red-contrib-mb-iot-rest


enebuler上の右側にあつ [admin] タブにて、[install] ボタンの上にある入力欄に "node-red-contrib-mb-iot-rest" と入力して[install]をクリックして下さい。


そうすると、しばらく経った後に同じく[admin]タブの一番下に、 "node-red-contrib-mb-iot-rest" のノードが追加されるのが確認できます。こちらの左側のアイコンが緑に点灯していればノードが利用可能です。

同時に、左側の node 一覧にの[function]グループの中に、 "node-red-contrib-mb-iot-rest" のノードが追加されるのが確認できます。これを利用して接続していきます。

こちらのノードへの設定項目は以下となります。
 Properties

MotionBoardのリアルタイム連携 WebAPIを実行するノードです。
パラメータは次の通りです。
  • url : REST API用のURL
  • tenant : テナント名(必須)
  • authkey : リアルタイム連携の設定画面で生成した認証キー(必須)
  • template : リアルタイム連携の設定画面で指定したテンプレート名(必須)
パラメータはmsg.mbでも同様に定義することができ、画面の設定よりも優先されます。
例 : msg.mb = {url:'http://localhost:8787/motionboard', tenant:'system', authkey:'xxx', template:'テンプレート名'}
併せて、msg.payloadにbodyが格納されている必要があります。フォーマットはオンラインマニュアルの「リアルタイム連携のWeb API」のページを参照してください。
※シンプルモードについて
msg.simple === trueの場合に限り、bodyの記述を大部分省略できます(ただし、1レコードのみの送信に制限されます)。
msg.payloadに、bodyの代わりにステータス値、緯度経度からなるObjectを設定してください。
例1:(ステータス値を送信)msg.payload = {c1:true, c2:123, c3:'abc'}
例2:(緯度経度を送信)msg.payload = {lat:35.659304, lon:139.700467}
例3:(両方)msg.payload = {c1:true, c2:123, c3:'abc', lat:35.659304, lon:139.700467}
以下の項目は自動的に値が埋められます。
  • body.loginId : id + 実行日時のミリ秒
  • body.name : 'mbnode'固定
  • body.version : 実行日時のミリ秒
  • body.template : msg.mbあるいは画面で指定したテンプレート名
  • body.retry : true固定
  • body.locations : (msg.payload.lat, msg.payload.lonいずれか未指定時)空配列
  • body.locations.レコード.time : (msg.payload.time未指定時)実行日時のミリ秒
  • body.locations.レコード.uptime : (msg.payload.uptime未指定時)実行日時のミリ秒
  • body.locations.レコード.accuracy : (msg.payload.accuracy未指定時)0
  • body.msg : 空配列固定
  • body.status : (msg.payload.lat,lon,time,uptime,accuracy以外未指定時)空配列
  • body.status.各ステータス.time : (msg.payload.time未指定時)実行日時のミリ秒
  • body.status.各ステータス.enabled : true固定
またbody.loginIdのみ、msg.loginIdとして指定ができます。
例 : msg.loginId = 'sensor123'
これらはMotionBoard側で定義を行った後に利用が可能です。こちらは [管理]-[システム設定]-[接続/認証]-[リアルタイム連携]にて設定が可能です。[WebAPI]利用するにチェックを入れましょう。なお、デフォルトテンプレートは変更してはいけません。


そちらに基づいて配置したノードに対して、ダブルクリックすると以下のプロパティ画面が開きますので、転記していきましょう。

今回のハッカソンは MotionBoard Cloud を利用しているので、以下の画像を参考にして設定を行ってください。



全体のノードは以下のようになります、フラットなJSONフォーマットに直して、MB nodeに投入してみてください。

enebuler用のサンプルコードを以下に貼り付けますので、取り込んでみてください。

[{"id":"32d50413.56a2ec","type":"inject","z":"d955d492.670be8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":140,"y":80,"wires":[["b100418f.ab85f"]]},{"id":"5c4ed028.f915a","type":"debug","z":"d955d492.670be8","name":"","active":true,"console":"false","complete":"false","x":650,"y":80,"wires":[]},{"id":"45f13a4b.a372c4","type":"node-red-contrib-mb-iot-rest","z":"d955d492.670be8","name":"mb-node","url":"https://iot-cloud.motionboard.jp/motionboard","tenant":"hogehoge","authkey":"fuga","template":"fuga","x":480,"y":80,"wires":[["5c4ed028.f915a"]]},{"id":"b100418f.ab85f","type":"function","z":"d955d492.670be8","name":"","func":"msg.simple = true;\nmsg.payload = {c1:true,c2:123,c3:'abc',lat:34,lon:135};\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":80,"wires":[["45f13a4b.a372c4"]]}]



コメント

このブログの人気の投稿

LoRaWANの下り通信

遅ればせながら・・・第2回のレポート前編