
この記事は、node-red Advent Calender の 24日目になります。
また、伊那市ハッカソンで紹介した記事を、その後の発表を元に更新したものです。
IoT事例増加中のMotionBoard
島澤甲プロデュースによる、IoTの為のリアルタイム分析、モニタリングツールであるMotionBoard (ウイングアーク1st株式会社) が特に最近IoT案件での活用が増えています。

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

enebularを通して、データを可視化

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

1. enebular → データベース → MotionBoard
こちらについては、クラウド上にアクセスが可能なデータベースを作成する必要があります。AWSやAzureのアカウントでデータベースをお試しで作成することができますのでそれらを利用すると良いでしょう。MotionBoard と外部データベースの接続については、こちらをご参照ください。
2. enebular → MB node → MotionBoard
次に、MB node を利用した接続方法です。こちらは Node-Red のポータルに公開されているノードを利用します。
こちらのノードへの設定項目は以下となります。
| 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に投入してみてください。![]()
								
 
											 
                     
                     
                     
                     
                         
                         
                         
                         
                        