Node-REDの設定

0. はじめに

受信側の OpenBlocks IoT に Node-RED をインストールし受け取ったBLEデータの可視化を行います。

Node-REDの設定には、次の4つの作業があります。

  1. Node-RED パッケージのインストール
  2. Node-RED の起動
  3. Node-RED フローの作成
  4. Node-RED ダッシュボードの表示

また、本チュートリアルには次の機材が用いられています。

1. Node-REDパッケージのインストール

OpenBlocks では、Node-REDを扱う一連のサービスをNode-REDパッケージとして提供しています。
IoTデータ制御パッケージをインストールしていない場合は、 メンテナンス⇒機能拡張タブからインストールします。

機能拡張

  1. インストール機能ペインのプルダウンメニューでNode-REDを選択します。
  2. 実行ボタンをクリックします。
  3. インストールが完了したら、メンテナンス⇒停止・再起動タブから OpenBlocks を再起動します。

インストール状況の確認方法など詳しくは、サービスの追加をご覧下さい。

2. Node-REDの起動

Node-RED⇒Node-REDタブにて、Node-REDを起動します。 上の黒いタブ列にNode-REDタブが表示されていない場合は、サービスタブにあるNode-REDのリンクをクリックして下さい。

Node-RED

  1. 使用設定使用するに設定します。
    設定項目が表示されます。
  2. 保存ボタンをクリックします。

IPフィルターが解放されていない場合には、解放確認のポップアップが表示されます。

Node-RED

OKボタンをクリックします。

Node-RED

ローカルエリアネットワークのみボタンをクリックします。

その他の設定項目の詳細は、Node-RED設定をご覧下さい。

以降の説明ではNode-RED特有の名称や用語が用いられます。初めてNode-REDに触れられる方はチュートリアルを進める前にNode-REDの簡易説明をお読み下さい。

3. Node-RED フローの作成

Node-REDのフローを作成します。

チュートリアルでは、PD Handler BLEが出力しPD Repeaterにより転送された オムロン環境センサ USB型(2JCIE-BU)JSONフォーマット文字列を読み込み、 温度(temperature)と湿度(humidity)を可視化します。
文字列のサンプルを示します。

{
"deviceId":"c15a862f7994",
"time":"2022-11-02T08:56:45.170+09:00",
"rssi":-55,
"datatype":"01",
"sequence":102,
"temperature":27.44,
"humidity":47.81,
"light":8,
"pressure":1017.25,
"noise":52.76,
"etvoc":409,
"eco2":1765,
"memo":"2JCIE-BL01"
}

文字列の詳細については対応センサーJSONフォーマットオムロン USB型環境センサをご覧下さい。

また、3-21.フローデータに本項で作成するフローデータを掲載します。フローの作成をフローデータのインポートで済ませたい方はご利用下さい。
フローデータのインポート方法については、Node-RED ユーザガイドフローのインポートとエクスポートをご覧ください。

3-1. Node-RED エディタへアクセスします。

Node-RED⇒Node-REDタブのリンクボタンをクリックします。
ブラウザの新しいタブにNode-RED エディタが開きます。

Node-RED

3-2. 入力ノードパレットからipc-inノードをドラッグしてシートにドロップします。

Node-RED

3-3. 配置したipc-inノードをダブルクリックし、ノードの編集を行います。

Node-RED

  1. Path入力フィールドに /pd_handler/userdev_0000001.sockと入力します。
  2. Abstract Flagチェツクボックスがチェツクされていることを確認します。
  3. PDHMS Flagチェツクボックスをチェックします。
  4. 完了ボタンをクリックします。
3-4. パーサノードパレットからjsonノードをドラッグしてシートにドロップします。

Node-RED

3-5. 配置したjsonノードをダブルクリックし、ノードの編集を行います。

Node-RED

  1. 動作プルダウンメニューにてJSON文字列とオブジェクト間の相互変換を選択します。
  2. 完了ボタンをクリックします。
3-6. 機能ノードパレットからfunctionノードをドラッグしてシートにドロップします。

Node-RED

3-7. 配置したfunctionノードをダブルクリックし、ノードの編集を行います。

Node-RED

  1. 名前入力フィールドに timestampと入力します。
  2. コードタブ入力フィールドに次のJavaScriptを入力します。
let d = new Date(msg.payload.time);
msg.timestamp = d.getTime();
return msg;
  1. 完了ボタンをクリックします。
3-8. 機能ノードパレットからchangeノードをドラッグしてシートにドロップします。

Node-RED

3-9. 配置したchangeノードをダブルクリックし、ノードの編集を行います。

Node-RED

  1. 名前入力フィールドに temperatuerと入力します。
  2. 対象の値プルダウンメニューにてmsg.を選択します。
  3. 対象の値入力フィールドに payload.temperatuerと入力します。
  4. +追加ボタンをクリックします。 ルールペインが追加表示されます。
  5. 追加された値の代入入力フィールドをpayloadからtopicに変更します。
  6. 追加された 対象の値入力フィールドに温度と入力します。
  7. 完了ボタンをクリックします。
3-10. dashboardノードパレットからgaugeノードをドラッグしてシートにドロップします。

Node-RED

3-11. 配置したgaugeノードをダブルクリックし、ノードの編集を行います。

Node-RED

  1. グループペインのプルダウンメニューにて新規にdashboard groupを追加を選択します。
  2. グループペインのボタンクリックします。

Node-RED

Group(新規にdashboard tabを追加)のボタンクリックします。

Node-RED

  1. 名前入力フィールドに2JCIEと入力します。
  2. 追加ボタンをクリックします。

Node-RED

  1. 名前入力フィールドに温度と入力します。
  2. 追加ボタンをクリックします。

Node-RED

  1. Label入力フィールドに現在と入力します。
  2. Unit入力フィールドに と入力します。
  3. Range min入力フィールドに -10と入力します。
  4. Range max入力フィールドに 60と入力します。
  5. 完了ボタンをクリックします。
3-12. dashboardノードパレットからchartノードをドラッグしてシートにドロップします。

Node-RED

3-13. 配置したchartノードをダブルクリックし、ノードの編集を行います。

Node-RED

  1. グループペインのプルダウンメニューにて [2JCIE]温度を選択します。
  2. ラベル入力フィールドに1時間と入力します。
  3. Y軸 最小入力フィールドに -10と入力します。
  4. Y軸 最大入力フィールドに 60と入力します。
  5. 完了ボタンをクリックします。
3-14. 機能ノードパレットからchangeノードをドラッグしてシートにドロップします。

Node-RED

3-15. 配置したchangeノードをダブルクリックし、ノードの編集を行います。

Node-RED

  1. 名前入力フィールドに humidityと入力します。
  2. 対象の値プルダウンメニューにてmsg.を選択します。
  3. 対象の値入力フィールドに payload.humidityと入力します。
  4. +追加ボタンをクリックします。 ルールペインが追加表示されます。
  5. 追加された値の代入入力フィールドをpayloadからtopicに変更します。
  6. 追加された 対象の値入力フィールドに湿度と入力します。
  7. 完了ボタンをクリックします。
3-16. dashboardノードパレットからgaugeノードをドラッグしてシートにドロップします。

Node-RED

3-17. 配置したgaugeノードをダブルクリックし、ノードの編集を行います。

Node-RED

  1. グループペインのプルダウンメニューにて新規にdashboard groupを追加を選択します。
  2. グループペインのボタンクリックします。

Node-RED

  1. 名前入力フィールドに湿度と入力します。
  2. 追加ボタンをクリックします。

Node-RED

  1. Label入力フィールドに現在と入力します。
  2. Unit入力フィールドに %RHと入力します。
  3. Range min入力フィールドに 30と入力します。
  4. Range max入力フィールドに 85と入力します。
  5. 完了ボタンをクリックします。
3-18. dashboardノードパレットからchartノードをドラッグしてシートにドロップします。

Node-RED

3-19. 配置したchartノードをダブルクリックし、ノードの編集を行います。

Node-RED

  1. グループペインのプルダウンメニューにて [2JCIE]湿度を選択します。
  2. ラベル入力フィールドに1時間と入力します。
  3. Y軸 最小入力フィールドに 30と入力します。
  4. Y軸 最大入力フィールドに 85と入力します。
  5. 完了ボタンをクリックします。
3-20. 配置したノードを結線し、デプロイします。

Node-RED

  1. 配置したノードを上図の通り結線します。
  2. デプロイボタンをクリックします。
3-21. フローデータ

本項で作成したフローのフローデータを以下に掲載します。

フローデータのインポート方法については、Node-RED ユーザガイドフローのインポートとエクスポートをご覧ください。

[{"id":"e5489f39b11b43ea","type":"tab","label":"フロー 1","disabled":false,"info":"","env":[]},{"id":"8a815d8e86727dae",
"type":"ipc-in","z":"e5489f39b11b43ea","name":"","path":"/pd_handler/userdev_0000001.sock","abs":true,"pdhms":true,
"x":90,"y":40,"wires":[["f07e8990011351d6"]]},{"id":"f07e8990011351d6","type":"json","z":"e5489f39b11b43ea","name":"",
"property":"payload","action":"","pretty":false,"x":250,"y":40,"wires":[["a2c8ed4e80dfeb53"]]},{"id":"a2c8ed4e80dfeb53"
,"type":"function","z":"e5489f39b11b43ea","name":"timestamp",
"func":"let d = new Date(msg.payload.time);\nmsg.timestamp = d.getTime();\nreturn msg;","outputs":1,"noerr":0,
"initialize":"","finalize":"","libs":[],"x":190,"y":120,"wires":[["89227f2d0134b364","6d69e88f22899647"]]},
{"id":"89227f2d0134b364","type":"change","z":"e5489f39b11b43ea","name":"temperature","rules":[{"t":"set","p":"payload",
"pt":"msg","to":"payload.temperature","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"温度","tot":"str"}],
"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":120,"wires":[["eeb9c6e450701f8f","aa0d90009d778133"]]},
{"id":"eeb9c6e450701f8f","type":"ui_gauge","z":"e5489f39b11b43ea","name":"","group":"9e146c94b2e5d85d","order":0,"width":0,
"height":0,"gtype":"gage","title":"現在","label":"℃","format":"{{value}}","min":"-10","max":"60","colors":["#00b500",
"#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":570,"y":120,"wires":[]},{"id":"aa0d90009d778133",
"type":"ui_chart","z":"e5489f39b11b43ea","name":"","group":"9e146c94b2e5d85d","order":1,"width":0,"height":0,
"label":"1時間","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,
"ymin":"-10","ymax":"60","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,
"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],
"outputs":1,"useDifferentColor":false,"className":"","x":570,"y":180,"wires":[[]]},{"id":"6d69e88f22899647","type":"change",
"z":"e5489f39b11b43ea","name":"humidity","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.humidity","tot":"msg"},
{"t":"set","p":"topic","pt":"msg","to":"湿度","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":380,
"y":240,"wires":[["6fe09f51e82ab0db","f6149d5efb2ab91a"]]},{"id":"6fe09f51e82ab0db","type":"ui_gauge","z":"e5489f39b11b43ea",
"name":"","group":"1923e0743633fae3","order":0,"width":0,"height":0,"gtype":"gage","title":"現在","label":"%RH",
"format":"{{value}}","min":"30","max":"85","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"",
"x":570,"y":240,"wires":[]},{"id":"f6149d5efb2ab91a","type":"ui_chart","z":"e5489f39b11b43ea","name":"",
"group":"1923e0743633fae3","order":1,"width":0,"height":0,"label":"1時間","chartType":"line","legend":"false",
"xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"30","ymax":"85","removeOlder":1,
"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8",
"#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"",
"x":570,"y":300,"wires":[[]]},{"id":"9e146c94b2e5d85d","type":"ui_group","name":"温度","tab":"a127442df3121166","order":1,
"disp":true,"width":"6","collapse":false,"className":""},{"id":"1923e0743633fae3","type":"ui_group","name":"湿度",
"tab":"a127442df3121166","order":2,"disp":true,"width":"6","collapse":false,"className":""},{"id":"a127442df3121166",
"type":"ui_tab","name":"2JCIE","icon":"dashboard","disabled":false,"hidden":false}]

4. Node-RED ダッシュボードの表示

Node-RED

右上のメニューから表示 > Dashboardを選択します。
ダッシュボード コンテキスト サイドバーが表示されます。

Node-RED

ダッシュボード コンテキスト サイドバーボタンクリックします。
ブラウザに新しいタブが開かれダッシュボードが表示されます。

Node-RED

正常に動作していれば上図のように温度と湿度のグラフが表示されます。