IoT
MotionBoard
enebular

IoT ハッカソン enebular - MotionBoard Cloud 設定手順


はじめに

本コンテンツは、IoT ハッカソンで使用する技術ハンズオンの資料です。

環境は参加者が自由選択できますので、参考としてご活用ください。


概要

本記事の構成では enebularからMotionBoard Cloud へデータを直接転送する構成 を紹介します。


事前準備

運営よりテナントIDとパスワードを受け取ってください。

MotionBoard Cloudのマニュアルページから、

MBC-1-1 使用前の準備をするを参考にログインできる状態にしておいてください。

MotionBoard クラウドサービスログインページ:

https://cloud.motionboard.jp/motionboard/


構成

温度センサーを使って、デバイスから温度データをMotionBoard Cloudへデータを転送し、ボードで可視化していきます。

以下に2種類のデバイスからHTTP(POST)を通じ、enebular → Motion Board Cloudの構成を示します。

構成1.png

構成3.png


MotionBoard Cloud へデータを転送する構成

本章では、以下の順番で手順を示していきます。



  1. MotionBoard Cloudで温度データ可視化のボード作成



  2. デバイスのプログラム


  3. enebularフロー作成

の順番で説明していきます。


1.温度データ可視化のボード作成

本資料では、地図上にピンを表示して、そのポイントの温度をグラフに表示するボードを作成していきます。


新規ボード作成

MotionBoard Cloudへログインします。

メニューからスタートナビを選択します。

次に新規作成を選択してボードを作成していきます。

スタートナビ

ボード新規作成

ボード新規作成のダイアログが表示されたら、名称を入力しOKを選択してください。

ここでは名称を温度モニタとします。

新規作成ボードの編集


データソース作成

次にアイテムウィザートのウインドウが表示されるので、新しいデータソースを作成していきます。

アイテムウィザートが表示されたら、+記号を選択します。

データソース作成

システム設定が表示されるので、メニューから[接続/認証] - [リアルタイム連携]を選択してください。

リアルタイム連携設定

システム設定のリアルタイム連携画面が表示されるので、永続化先DBタブを選択して、作成したテンプレートと保存先のDBを指定していきます。

左側のリスト一覧から、外部接続先名:DataStorage - タイプ:Dr.Sumを選択します。

真ん中にデータベース名一覧が表示されるので、DataStorageを選択します。

選択すると、右側の変更後の設定に以下設定がされていることを確認してください。

項目
設定値

外部接続先名
DataStorage

データベース名
DataStorage

永続化先DBを選択

続いて、リアルタイムタブを選択肢、テンプレート選択右側にある+ボタンを選択してください。

テンプレートの新規作成ダイアログが表示されるので、テンプレート名を入力してください。

ここでは、tmpr_templateとしています。

なお、後ほどこのテンプレート名はenebularのノード設定で使用するため、控えておいてください。

新規テンプレートを作成

テンプレート名ダイアログ

テンプレートを作成したら、以下項目の設定をしてください。

項目
設定

Web API
利用するにチェック

永続化
利用するにチェック

保存先テーブル名
tmpr_table

実行ユーザー
<各アカウントの名前>

実行ユーザーは、検索ボタンを押下して右側のドロップダウンリストから選択します。

認証キーの自動生成ボタンを押下してください。

生成された認証キーは先程のテンプレート名同様enebularのノード設定で使用するため、控えておいてください。

リアルタイム連携設定

続いてステータスタブを選択し、テーブルのステータスを作成します。

新規作成ボタンを選択して、ダイアログが表示されたら以下内容に従って、設定してください。

設定が完了したらOKを選択してダイアログを閉じます。

項目
設定

ステータス名
tmpr_c

MB IoT Agent
未設定

データ型
数値

ステータス設定一覧

温度値のステータス設定

設定が完了したら、保存を選択してテンプレートの作成を終了します。

保存ボタンを選択

テンプレート保存完了ダイアログ

最後にテンプレート作成・設定、永続化先DBの設定が完了したら、右上のバツボタンを選択して、リアルタイム連携の設定を完了します。

右上のバツを押下してテンプレート編集終了

アイテムウィザート画面に戻ったら、データソースの一覧から作成したテーブルtmpr_tableを選択します。

ツリーを展開して表示されなかった場合、接続先の右にある回転のアイコンを選択肢、更新してください。

テーブルを選択したら、次へを選択します。

データソースのテーブル選択

アイテムウィザートの2つ目で、アイテムの種類を選択しますが、

まず先に画面のレイアウトを作成するため、ここではキャンセルを選択しウィザードを終了します。

ウィザード終了


レイアウト作成

ここまでの手順でアイテムのない空のボードが作成されました。

レイアウトの作成をしていきます。

ここでは、左右2つに50%-50%で分割し、左側のペインにGEO(地図)を右側のペインにチャート(折れ線グラフ)を表示していきます。

下に表示されている項目の一覧から、レイアウト編集のアイコンを選択肢画面レイアウトを編集していきます。

アイコンを選択したら、分割するページ左側にマウスカーソルを持っていき、表示されたアイコンをクリックします。

レイアウトのセパレータ設定

分割されたら、左側にGEOを配置します。

102_board_layout_geo.png


GEO設定

GEOを配置するとGEO設定の画面が表示されるため、地図情報の画面を表示する設定をしていきます。


データソース設定

データソースの設定項目が固まっている位置の右側にある新規作成を選択します。

ダイアログが表示されるので、データソース名決めます。ここでは、tmpr_dsとします。

データソース選択

データソース名入力

データソースの設定をしていきます。

アイテムウィザードで作成したtmpr_tableを選択して、OKを選択します。

データソース選択

データソースエディタでは、リアルタイムに更新させるため以下の順番で設定をしていきます。


  1. ドリルアクションの機能OFF

  2. リアルタイム分析を有効化

  3. 見せるデータ項目を選択、設定

初めに、ドリルアクションの機能と両立しないためOFFしていきます。



  1. ドリルアクションを選択

  2. ドリルダウンタブでドリルダウンしないをチェック

  3. ドリルスルータブでドリルスルーしないをチェック


  4. OKボタンで設定終了

114-1_122_drill_action_off.png

ドリルダウンしない

ドリルスルーしない

ドロップダウンリストで[分析] - [リアルタイム分析]を選択します。

表示されたリアルタイム分析ダイアログで、以下項目を設定します。データ更新間隔は任意ですが、ここでは5秒とします。

設定が完了したらOKボタンを選択して設定を終了します。

「行列項目をリアルタイム分析用に変更します。...」と警告が表示されますが、OKを選択します。

項目
設定

リアルタイム分析

有効にするにチェック

データ更新間隔(秒)
5

リアルタイム分析を選択

リアルタイム分析を設定

各拠点(ID)ごとの温度データ('tmpr_c')を時系列(DATETIME)で表示するため、項目一覧から項目を以下のようにドラッグ&ドロップします。


  • 列項目にID

  • 行項目にDATETIME (リアルタイム分析の対象項目で設定済み)

  • 集計項目にtmpr_c

項目一覧か項目を設定

集計項目の型と集計の方法を変更します。

集計項目のに設定したtmpr_cをマウスオーバーし、エンピツアイコンを選択します。

集計項目の型を変更

基本項目設定のダイアログが表示されるので、以下項目を設定しOKを選択します。

項目
設定

データ型
数値

集計方法
平均

データ型と集計方法を設定

一通り設定が完了すると以下のような画面となります。

設定が完了したらOKを選択し、データソース設定を終了します。

GEOデータソース設定完了

GEOの新規作成ダイアログに戻ったら、「利用データタイプ」で明細データをチェックします。

次に「マッピングタイプ」に緯度経度チェックを入れます。

次に項目設定で、以下値を割り付けます。

項目名
種類

ID
表示名

LAT
緯度

LON
経度

Board.png

Board-2.png


リアルタイム連携設定

次にリアルタイム連携を設定するため、リアルタイム連携タブを選択します。

116_geo_config.png

設定画面が表示されたら、「リアルタイムデータを重ねて表示するにチェックを入れ、「テンプレート選択」で作成したテンプレート(ここではtmpr_template)を選択します。

続いて、詳細の項目が有効になるため、以下設定をしていきます

項目
設定

適用方法
特定のステータスの値

キーとなるステータス
tmpr_c

色のリスト下側にある追加ボタンを選択

色を選択していきます。ここでは以下のように設定します。

項目
設定


赤(#FF0000)

最小
0

最大
100

設定が完了したらOKを選択します。

リアルタイム連携を設定


チャート設定

レイアウト画面に戻ったら、右側にチャートを配置します。

チャートを配置

配置するとチャート新規作成の画面が表示されるので、作成済みのtmpr_dsが選択されていることを確認します。

下側のチャートのアイコン群から折れ線を選択します。

設定が終わったらOKを選択します。

折れ線設定


ボード設定を保存

上記までの手順でレイアウトと各ボードのアイテムの設定が完了しました。

以下のような表示になるので、下側の保存アイコンを選択します。

確認のダイアログが表示されるので、OKを選択して、ボードの保存完了です。

レイアウト完了・保存

ボード定義保存ダイアログ

最後に、編集を終了アイコンを選択してボードの編集完了です。

ボード編集終了

以上で、温度モニタ用ボード作成の作成が完了です。

次にデバイスからMotionBoard Cloudへデータを転送する箇所を作成していきます。



enebularフロー作成

新しくenebularのフローを作成していきます。


フロー作成


  • 作成したプロジェクトのASSETSから、Flowsを選択します。

  • Flowのリストから+ボタンを選択して、フローを作成していきます。

  • ダイアログが表示されたら、最上段のname欄にフロー名を入力します。
    ここでは、"motionboard"としています。
    入力が終わったら、Continueボタンを選択してください。

  • 続いて、Editボタンを選択して、フローを編集していきます。

フロー作成


フロー編集

以下の図のようなフローを作成していきます。

enebular_Flow_Editor.png

各ノードに以下の内容を設定していきます。


入力 - HTTP

項目

メソッド
POST

URL

/tmpr
(※任意ですが、ここでは"/tmpr"としています)

URLはデバイスの<エントリーポイントURL>で使用するため、控えておいてください。


機能 - function

項目

名前
任意

コード
下記を参照

var newPayload = {

id: msg.payload.imsi, // IMSIをIDとして設定
time: new Date().getTime(), // タイムスタンプ付与
lat: msg.payload.lat, // 緯度
lon: msg.payload.lon // 経度
};

msg.payload = newPayload;

return msg;


機能 - node red contrib mb iot rest

項目

Name
任意

URL
https://iot-cloud.motionboard.jp/motionboard

Tenant
アカウント開設時に取得したテナントID
(※運営からIDをもらってください)

Authkey
MotionBoard Cloudで生成した認証キー

テンプレート
MotionBoard Cloudで作成したテンプレート


出力 - http response

項目

名前
任意

状態コード
200

状態コードはデバイスがPOSTしたリクエストに対して返すHTTPステータスコードで、任意の値です。ここでは200としています。


出力 - debug

特に設定することはありません。


デプロイ

編集が完了したら、デプロイを選択します。

enebular_Flow_Editor-3.png

続いて、iアイコンにマウスカーソルを載せて転送先URLを控えてください。

転送先URL

以上で、デバイスからMotionBoard Cloudへの転送フロー作成が完了です。



デバイスプログラム


IDと緯度経度を送信する機能を追加

デバイスのプログラムの作成をして、一部コードを修正します。

(元のコードはこちら)

- JsonStringify()メンバ関数に緯度経度(ここでは固定値)のJSON要素を追加

- 拠点を識別するために、setup()関数にIMEI(端末識別番号)取得処理を追加


wiolte_bg96_temperature2.ino

...(省略)...

// ===================================================
// グローバル変数
// ===================================================
WioCellular g_wio;
char imsi[20]; // ← ここの行を追加

...(省略)...

// 送信データをJSON文字列へ変換
String JsonStringify() const
{
String result("");
char buf[32];

sprintf(buf, "%d", static_cast<int>(this->temp));
result += "{\"tmpr_c\":";
result += buf;
result += ",\"lat\":35.664001"; // ← ここの行を追加
result += ",\"lon\":139.744244"; // ← ここの行を追加
result += ",\"imsi\":"; // ← ここの行を追加
result += imsi; // ← ここの行を追加
result += "}";

return result;
}
};

// ===================================================
// 初期化処理
// ===================================================
void setup()
{
...(省略)...
SerialUSB.println(TARGET_HOST);

g_wio.GetIMSI(imsi, sizeof(imsi)); // ← ここの行を追加
SerialUSB.print("IMSI:"); // ← ここの行を追加
SerialUSB.println(imsi); // ← ここの行を追加
}
...(省略)...



エントリーポイントの修正

新しくフローを作成するため、enebularのフロー作成で控えた転送先URLとエントリーポイントURLをそれぞれ設定してください。

// データ送信先選択

#define TARGET_HOST "<転送先URL>"
#define TARGET_URL "<エントリーポイントURL>"

// データ送信先選択
#define TARGET_HOST "https://ev2-prod-node-red-*****.herokuapp.com/"
#define TARGET_URL "/tmpr"


解説


JsonStringify()メンバ関数に緯度経度(ここでは固定値)のJSON要素を追加

元のプログラムでは、温度データのみを送信していましたが、位置情報(緯度:lat、経度:lon)を追加しています。

    result += ",\"lat\":35.664001";

result += ",\"lon\":139.744244";

なお、ここではサンプルとして位置は固定の座標としています。


拠点を識別するために、setup()関数にIMEI(端末識別番号)取得処理を追加

本対応はデバイスを複数台、複数拠点に設置して運用を想定しての変更になります。

ここでは、拠点を識別するための手段としてIMEIを用いてデータに加えるようにしています。

まず、IMSIを格納するための領域を準備します。

char imsi[20];

続いて、初期化関数にIMSIを取得するための処理を追加します。

  g_wio.GetIMSI(imsi, sizeof(imsi));

SerialUSB.print("IMSI:");
SerialUSB.println(imsi);



実行結果確認

デバイスへプログラムを書き込み、温度データがと位置情報が転送されると、ボードに以下のように、ある地点での温度データが表示されます。

Board.png



応用

enebularの応用で拠点ごとの住所取得サービスとの連携など、デバイスから吸い上げたデータを加工することができます。

リンク先では、以下の内容を紹介しています。


  • enebularのフローに住所機能追加

  • MotionBoard アイテムのリレーション機能追加



enebularでのデバッグ 〜debugノードの活用〜

全体を作成して期待する通りに可視化まで行かない場合があります。

そんなときはdebugノードを活用して、どこまで正しく動いているかを確認すると開発が捗ります。


デバイス → enebularにデータが転送しているかチェック

enebular_Flow_Editor-2.png

上記フローを作成、デプロイして正しく転送されると、デバッグタブに以下内容が出力されます。

正しく転送されていなければ何も表示されません。

デバッグ


データ加工後のデータが正しいかのチェック

データ転送同様に、データが正しく加工されているかをチェックするために、functionノードの後にdebugノードを追加すると良いです。

enebular_Flow_Editor-3.png

複数デバッグログを配置すると、ログがたくさん表示されます。

ログがどのノードで発生したものかを確認するには、ログの項目にマウスを乗せるとどのノードのログが分かります。

複数デバッグログ


デバッグログを一時的に無効化する

デバッグが毎回表示され煩わしい場合は、デバッグノードの右端のタブをクリックすることで、ログを無効化できます。

こうすることで、ノード接続線を削除 → デプロイ や ノード削除 → デプロイなど

デプロイ操作無しに無効化することができます。

enebular_Flow_Editor-4.png