はじめに
本コンテンツは、IoT ハッカソンで使用する技術ハンズオンの資料です。
環境は参加者が自由選択できますので、参考としてご活用ください。
概要
本記事では enebularを使用してエッジデバイスから受信したデータをMotionBoard Cloud へデータを直接転送する構成 を紹介します。
対象のエッジデバイスは Tiセンサータグ と Wio LTE M1/NB1(BG96) です。
準備
-
enebularアカウント
-
デバイスから enebular へデータ転送される状態にしておいてください
-
運営よりテナントIDとパスワードを受け取ってください。
MotionBoard クラウドサービスログインページ: https://wa.motionboard.jp/motionboard/login
enebularプロジェクト作成
- https://enebular.com/sign-in/ にアクセスしてenebularにログイン

-
+ Create Project
ボタンを選択

- プロジェクト名を入力し、
Submit
を選択

- 作成されたプロジェクトを選択

- 右下の
+
アイコンを選択

- フローの情報を設定し、
Continue
を選択
項目 | 設定値 | 備考 |
---|---|---|
Asset Type | flow | デフォルトから変更なし |
Name | ※任意のフロー名 | ここでは「handson-flow」としています |
Description | 空欄 | 任意で説明を記載してください |
Priviledge | edit, deploy, publish | デフォルトから変更なし |
Category | other | - |

-
edit
ボタンを選択してフロー編集画面を開く

-
i
アイコンにマウスオーバーして、httpNodePath を表示させる。表示されたURLを控えてください

Wio LTEのコード書き換え
先ほど控えたhttpNodePath のURLをWio LTEのスケッチに貼り付けてください。
この時、最後に"/"をつけないように注意してください。
追加ノードをインストール
以下のノードがインストールされていない場合、追加でインストールします。
- node-red-contrib-scx-ibmiotapp
- node-red-contrib-motionboard
右側のサイドバーのタブからadmin
を選択してください。
ノード名の入力欄に、インストール対象のノード名を入力します。
install
ボタンを選択して、ノードをインストールします。

しばらく待機し、ノードがインストールされると左側のパレットにノードが追加されます。


Wio LTE用フロー作成 〜HTTP-Post編〜
疎通確認フロー作成
以下の図のようなフローを作成していきます。

画面左のパレットからノードをドラッグ&ドロップして、以下のノードを配置します。
-
入力のグループ >
http in
ノード -
出力のグループ >
http response
ノード -
出力のグループ >
debug
上記ノードを配置したら、ノード間をコネクタ部分をドラッグして接続します。 -
各ノードの設定をします。
-
http in
ノードには、以下のように、 メソッド:POST
、URL:/debug
を設定します。
-


- 右上の
デプロイ
ボタンをクリックし、デプロイします。

動作確認
Wio LTE M1/NB1 にプログラムを書き込んだ状態で、電源をONしてください。
enebularの画面の右側のサイドバーで、デバッグ
を選択します。
データがデバイスから転送されてくると、以下のようにデータが転送されます。

このようにすることで、デバイスから正しくデータが転送されてきているかを確認することができるようになります。
Tiセンサータグ用フロー作成
Tiセンサータグのハンズオンページを進めて、Tiセンサータグ、enebularと疎通する状態にします。
入力 > ibmiot
ノードを追加し、debug
ノードに接続します。
ibmiot
ノードをダブルクリックし、「Device Id」の設定を行いデプロイします。

上記のように設定することで、Wio LTE と Tiセンサータグの両方からデータを受け取れるようになりました。
データ加工とテスト
Wio LTE & Tiセンサータグ共通のデータ加工
以下のようなフローを作成していきます。

左側パレットから
- 機能 >
function
ノードを配置します - 出力 >
debug
ノードを配置します
http in
ノードとibmiot
ノードを1.のfunction
ノードに接続します。
1.のfunction
ノードをdebug
ノードに接続します。
続いて各ノードに対して設定を行なっていきます。
1. MBC用データ加工 functionノードの設定
以下のコードをfunctionノードの「コード」に貼り付けます。
var newPayload = {
id: "0", // IDとして設定
millis: new Date().getTime(), // タイムスタンプ付与
ambientTemp: msg.payload.d.ambientTemp || msg.payload.d.ambient_temp,
humidity: msg.payload.d.humidity
};
msg.payload = newPayload;
return msg;
テストデータの作成と動作確認
ここでは、デバイスの開発と可視化ツールの開発を平行で進めるためのデバッグ方法について説明します。
実際にMotion Board Cloudへデータを飛ばす前にダミーデータを飛ばすことで意図した表示になるか、
デバイスから転送されるデータに問題があるかを切り分けやすくなります。
- 入力 >
inject
ノードを配置します - 機能 >
function
ノードを配置します
1.のinject
ノードを2.function
に接続
2.のfunction
ノードを前に作成したfunction
ノードに接続します。
1. inject設定
- ペイロードの左側をクリックし、
{} JSON
を選択 - 右側の
…
を選択

- 以下コードを貼り付けます
{
"d": {
"ambientTemp": 25.5,
"humidity": 38
}
}
2. ダミーデータ作成 function設定
以下のコードを貼り付けます。
// ランダムデータを付加
msg.payload.d.ambientTemp += ((Math.random()-0.5) * 8); // ±4℃
msg.payload.d.humidity += ((Math.random()-0.5) * 10); // ±5%
// 小数点第2位へ丸める
msg.payload.d.ambientTemp = parseFloat(msg.payload.d.ambientTemp.toFixed(2));
msg.payload.d.humidity = parseFloat(msg.payload.d.humidity.toFixed(2));
return msg;
上記の設定が完了したら、デプロイ
を選択肢します。
テストデータの動作確認
inject
ノードの左側を選択すると、injectに設定したJSONデータが出力されます。
「ダミーデータ作成」のノードで固定値からランダムな値を付加した結果をMBC用データ加工へ出力します。

デバイス別データ加工
Tiセンサータグは、温度・湿度以外にもセンサーの値を取ることができる。
また、Wio LTEを用いた場合、Groveで接続するセンサーに応じて多彩なセンサーを組み合わせ流こともでき、HTTPのレスポンスという形でデータをフィードバックすることができる。
実現したいこと、開発しやすさ、多様さなどで送受信するデータはおのずと変わってくる。
そういった要望を想定し、ここではTiセンサータグで取れる値を全てアウトプットするようフローを変更する。
- 機能 >
function
ノード(図 MBC用データ加工-Ti)を配置する - 出力 >
debug
ノードを配置する - 元々配置した「MBC用データ加工」の名前を「MBC用データ加工**-Wio**」に変更する
-
ibmiot
ノードの出力先を「MBC用データ加工-Wio」から、1.で配置したfunction
(図のMBC用データ加工-Ti)に変更する
図のMBC用データ加工-Tiのコードに以下内容を貼り付ける。
var newPayload = {
id: "0", // IDとして設定
millis: new Date().getTime(), // タイムスタンプ付与
ambientTemp: msg.payload.d.ambientTemp || msg.payload.d.ambient_temp,
objectTemp: msg.payload.d.objectTemp,
humidity: msg.payload.d.humidity,
pressure: msg.payload.d.pressure || msg.payload.d.air_pressure,
altitude: msg.payload.d.altitude,
accelX: msg.payload.d.accelX || msg.payload.d.acc_x,
accelY: msg.payload.d.accelY || msg.payload.d.acc_y,
accelZ: msg.payload.d.accelZ || msg.payload.d.acc_z,
gyroX: msg.payload.d.gyroX || msg.payload.d.gyro_x,
gyroY: msg.payload.d.gyroY || msg.payload.d.gyro_y,
gyroZ: msg.payload.d.gyroZ || msg.payload.d.gyro_z,
magX: msg.payload.d.magX || msg.payload.d.compass_x,
magY: msg.payload.d.magY || msg.payload.d.compass_y,
magZ: msg.payload.d.magZ || msg.payload.d.compass_z,
light: msg.payload.d.light || msg.payload.d.light,
key1: msg.payload.d.key1 || msg.payload.d.key_1,
key2: msg.payload.d.key2 || msg.payload.d.key_2
};
msg.payload = newPayload;
return msg;
Motion Board Cloudとの接続の準備
MotionBoard > realtime api
ノードを配置します
各加工用データからの出力を realtime api
ノードに接続します。

設定/詳細は可視化のハンズオンで説明します。
参考: enebular editor
ブラウザ版のenebularで開発していると、タイムアウトに気をつけなければなりません。
じっくりと開発する場合、デスクトップ版のenebular editorを使っていただけると、タイムアウトを気にすることなく開発に専念できます。
トラブルシューティング
ブラウザ版エディタがタイムアウトする
ブラウザ版のenebularで外部ホスティングなし開発を行うと、60分でタイムアウトしてしまいます。
外部ホスティングについて詳細はここでは説明ません。
- 適宜ブラウザをリロードと行なっていただく
- デスクトップ版のenebular editorを使っていただく
ことで対処可能です。