LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 3 years have passed since last update.

新潟 IoTハッカソン2020: enebularを活用したデータ連携

Last updated at Posted at 2020-02-17

はじめに

本コンテンツは、IoT ハッカソンで使用する技術ハンズオンの資料です。
環境は参加者が自由選択できますので、参考としてご活用ください。

概要

本記事では enebularを使用してエッジデバイスから受信したデータをMotionBoard Cloud へデータを直接転送する構成 を紹介します。
対象のエッジデバイスは Tiセンサータグ と Wio LTE M1/NB1(BG96) です。

準備

enebularプロジェクト作成

  • https://enebular.com/sign-in/ にアクセスしてenebularにログイン
    01_Sign_In___enebular.png

  • + Create Projectボタンを選択
    02_Projects___enebular.png

  • プロジェクト名を入力し、Submitを選択
    03_Projects___enebular.png

  • 作成されたプロジェクトを選択
    04_Projects___enebular.png

  • 右下の +アイコンを選択
    05_hanson-niigata2020___enebular.png

  • フローの情報を設定し、Continueを選択

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

06_hanson-niigata2020___enebular.png

  • edit ボタンを選択してフロー編集画面を開く
    07_handson-flow___enebular.png

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

Wio LTEのコード書き換え

先ほど控えたhttpNodePath のURLをWio LTEのスケッチに貼り付けてください。
この時、最後に"/"をつけないように注意してください。
コード書き換え.png

追加ノードをインストール

以下のノードがインストールされていない場合、追加でインストールします。

  • node-red-contrib-scx-ibmiotapp
  • node-red-contrib-motionboard    右側のサイドバーのタブからadminを選択してください。 ノード名の入力欄に、インストール対象のノード名を入力します。 installボタンを選択して、ノードをインストールします。 10_enebular_Flow_Editor.png

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

14_node01__enebular_Flow_Editor.png

15_node02_enebular_Flow_Editor.png

Wio LTE用フロー作成 〜HTTP-Post編〜

疎通確認フロー作成

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

11_enebular_Flow_Editor.png

画面左のパレットからノードをドラッグ&ドロップして、以下のノードを配置します。
- 入力のグループ > http inノード
- 出力のグループ > http response ノード
- 出力のグループ > debug
上記ノードを配置したら、ノード間をコネクタ部分をドラッグして接続します。

  • 各ノードの設定をします。

    • http inノードには、以下のように、 メソッド:POST、URL:/debug を設定します。
      12_enebular_Flow_Editor.png
    • http responseノードには、以下のように状態コード:200を設定します。
      http_responseノード.png
  • 右上のデプロイボタンをクリックし、デプロイします。

deploy.png

動作確認

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

16_enebular_Flow_Editor.png

このようにすることで、デバイスから正しくデータが転送されてきているかを確認することができるようになります。

Tiセンサータグ用フロー作成

Tiセンサータグのハンズオンページを進めて、Tiセンサータグ、enebularと疎通する状態にします。

入力 > ibmiotノードを追加し、debugノードに接続します。
ibmiotノードをダブルクリックし、「Device Id」の設定を行いデプロイします。

17_enebular_Flow_Editor.png

上記のように設定することで、Wio LTE と Tiセンサータグの両方からデータを受け取れるようになりました。

データ加工とテスト

Wio LTE & Tiセンサータグ共通のデータ加工

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

20_enebular_Flow_Editor.png

左側パレットから
1. 機能 > functionノードを配置します
2. 出力 > debugノードを配置します

http inノードとibmiotノードを1.のfunctionノードに接続します。
1.のfunctionノードをdebugノードに接続します。

続いて各ノードに対して設定を行なっていきます。

1. MBC用データ加工 functionノードの設定

以下のコードを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へデータを飛ばす前にダミーデータを飛ばすことで意図した表示になるか、
デバイスから転送されるデータに問題があるかを切り分けやすくなります。

以下のフローのようになるよう、ノードを追加していきます。
21_enebular_Flow_Editor.png

  1. 入力 > injectノードを配置します
  2. 機能 > functionノードを配置します

1.のinjectノードを2.functionに接続
2.のfunctionノードを前に作成したfunctionノードに接続します。

1. inject設定

  • ペイロードの左側をクリックし、{} JSONを選択
  • 右側のを選択

22_enebular_editor.png

  • 以下コードを貼り付けます
{
  "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用データ加工へ出力します。

23_enebular_Flow_Editor.png

デバイス別データ加工

Tiセンサータグは、温度・湿度以外にもセンサーの値を取ることができる。
また、Wio LTEを用いた場合、Groveで接続するセンサーに応じて多彩なセンサーを組み合わせ流こともでき、HTTPのレスポンスという形でデータをフィードバックすることができる。
実現したいこと、開発しやすさ、多様さなどで送受信するデータはおのずと変わってくる。
そういった要望を想定し、ここではTiセンサータグで取れる値を全てアウトプットするようフローを変更する。

変更後のフローは以下の通り。
30_enebular_editor.png

  1. 機能 > functionノード(図 MBC用データ加工-Ti)を配置する
  2. 出力 > debugノードを配置する
  3. 元々配置した「MBC用データ加工」の名前を「MBC用データ加工-Wio」に変更する
  4. ibmiotノードの出力先を「MBC用データ加工-Wio」から、1.で配置したfunction(図のMBC用データ加工-Ti)に変更する

図の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ノードに接続します。

31_enebular_editor.png

設定/詳細は可視化のハンズオンで説明します。

参考: enebular editor

ブラウザ版のenebularで開発していると、タイムアウトに気をつけなければなりません。
じっくりと開発する場合、デスクトップ版のenebular editorを使っていただけると、タイムアウトを気にすることなく開発に専念できます。

トラブルシューティング

ブラウザ版エディタがタイムアウトする

ブラウザ版のenebularで外部ホスティングなし開発を行うと、60分でタイムアウトしてしまいます。
外部ホスティングについて詳細はここでは説明ません。

  • 適宜ブラウザをリロードと行なっていただく
  • デスクトップ版のenebular editorを使っていただく ことで対処可能です。

※補足:タイムアウト15分前になると、以下のようなダイアログが表示されます。
enebular_timeout_alert.png

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up