要約
- この記事では、OKIのAIエッジコンピューター「AE2100」を使用して、遠隔地にあるセンサーデータを920MHz帯マルチホップ無線「SmartHop」経由で収集、AE2100上で可視化する方法を紹介します。
- 第2回の「データ収集編」では、AE2100にNode-REDを導入し、Modbus RTU対応のセンサーデータの収集・見える化を行う方法を解説します。
はじめに
Node-REDはブラウザベースのエディタ内でパレットに並ぶ多種多様なノードを結びつけることによって、容易にフローを作成することができるツールです。
今回は、AE2100のdockerにNode-REDを導入し、CO2濃度および温湿度データの収集(Modbus RTUプロトコル)・見える化を行う方法を紹介していきます。センサーデータの収集は、第1回で構築したSmartHopの無線ネットワーク経由で行います。
環境
実行環境は次の図のような構成を前提とします。
ウインドウズPCからAE2100へTeraTermによって接続、AE2100からインターネットへ接続が可能なことを確認してください。
その他の環境は「AE2100」と920MHz帯無線「SmartHop」を活用して遠隔地のセンサーデータを収集してみよう(1)―無線ネットワーク構築編―をご参照ください。
AE2100へのNode-REDの導入
Node-REDの構成およびAE2100に導入する方法については、OKI AE2100 & Node-REDでローコードIoTしてみた。その2 構築編に分かりやすく記載されているので、そちらをご参照ください。
上記記事の「Dockerfile」の章で、2つのNode-REDライブラリを追加インストールしていますが、本記事用に以下の2つのライブラリもインストールしておいてください。
・node-red-contrib-modbus (Modbus RTU実装用ノード)
・node-red-contrib-float (浮動小数データの変換用ノード)
※本記事ではMQTTは使用しないので、「Dockerコンテナの実行」の章に記載されている1883番ポートの設定は不要です。
Node-REDをAE2100に導入したら、Webブラウザでhttp://192.168.100.1:1880にアクセスします。おなじみのフローエディタが表示されるはずです。
Modbus RTUでのデータ収集の実装
Node-REDのフローエディタで各種ノードをワークスペースに配置し、ノード間を線で結ぶことによってフローを作成します。
本記事では、Modbus RTUプロトコルでCO2濃度と温湿度のデータを収集するフローを以下のように作成しました。
全体的な流れとしては、CO2コントローラーのデータ(CO2濃度)と無線入力ユニットのデータ(温湿度)をModbus RTUのReadコマンドにより1秒間隔で収集し、ダッシュボードで見える化まで行っています。
今回使用したノードは以下の8種類です。各ノードでそれぞれどんな処理を行ったかについて解説していきたいと思います。(各ノードの詳細な機能についてはQiitaの素晴らしい記事等をご参照ください。)
injectノード
injectノードは一定間隔で自動的にフローを始動させることができます。
本記事では始点にinjectノードを配置し、1秒間隔でデータを収集するフローを作成しています。
Modbus Getterノード
Modbus GetterノードではModbus RTUプロトコルに則ったデータ収集を行うことができます。
本記事では、CO2コントローラーの場合は局番1のレジスタ0x044のデータ(CO2濃度)をReadし、無線入力ユニットの場合は局番2のレジスタ0x002~0x007のデータをReadします。
※無線入力ユニットは入力1、入力2、入力3のデータを一括で収集し、後続のノードで入力1データ(温度)と入力3データ(湿度)にそれぞれ分割表示します。
※各センサーのレジスタマップはそれぞれの仕様書をご参照下さい。
【設定値】
・名前:任意(センサーが識別できる名前など)
・Unit-ID:局番(センサーに設定した局番)
・FC:Modbusの機能コード(センサーの収集項目に合わせて設定)
・Address:収集するデータの先頭のレジスタ(センサーの収集項目に合わせて設定)
・Quantity:収集するデータ数(byte数)
・Server:RS485(ModbusRTUの場合)
functionノード
functionノードでは文字列を数字データに変換しています。本記事では、後述のchartノードで時系列グラフを作成する際に入力が数字データでないとグラフが表示されないため、chartノードの前に配置しています。
また、無線入力ユニット側では、2つのデータを結合するという処理も同時に行っています。(対象となるデータが32ビット浮動小数点のデータであるため)
splitノード
本記事では、無線入力ユニットの連続した6つのデータをまとめてReadしています。splitノードでは、その6データを[2データ,2データ,2データ]に分割しています。
※無線入力ユニットのデータが32ビット浮動小数点であるため2データずつに分割
switchノード
switchノードでは、splitノードで分割したデータを3つの出力として分離します。今回は入力1(熱電対が測定する温度)と入力3(湿度)を使用するので、ノードの出力側の上から2番目の出力は使用しません。
toFloatノード
無線入力ユニットの対象データ(入力1(温度)、湿度)が32ビット浮動小数点であるため、変換が必要です。toFloatノードを中継することで、32ビット浮動小数点から10進数の値に変換します。
センサーデータはどのようなデータ形式で出力されるかは、センサーの収集項目によって異なるので、各センサーの仕様書で確認してください。
gaugeノード
収集したセンサーデータの瞬時値をゲージグラフで表示するために使用します。ゲージグラフはダッシュボード上に表示されます。
chartノード
収集したセンサーデータの時系列値を折れ線グラフで表示するために使用します。折れ線グラフはダッシュボード上に表示されます。
※棒グラフや円グラフでも表示することが可能です。
#debugノードを使用した確認方法
前章で紹介したもの以外にも、Node-REDにはdebugノードという便利なノードがあります。
以下のようにdebugノードを配置してデプロイしてみてください。右側にあるデバッグエディターで、各センサーからの応答データを確認することができます。フロー作成途中でも正常にデータが収集できているか等を確認できるため、適宜活用することをお勧めします。
上記の図の例では、Modbus Getterノードを使用して収集した各センサーデータの生の値が配列で取得できていることが確認できます。
ちなみに、実際にはAE2100と各センサー間では以下のような電文のやり取りが行われていますが、Modbus Getterノードを使うことでModbusプロトコルの電文を意識せずにデータ収集できるのでとても便利です。
ダッシュボードによる表示確認
下図のようにCO2濃度、温度、湿度のゲージグラフおよびCO2濃度と温度の時間推移がダッシュボードに表示できました。
なお、gaugeノードとchartノードの細かい設定やダッシュボードの開き方については、OKI AE2100 & Node-REDでローコードIoTしてみた。その3 実践編 1に分かりやすく記載されているので、そちらをご参照ください。
まとめ
今回はAE2100にNode-REDを導入し、920MHz帯マルチホップ無線「SmartHop」経由でセンサーデータの収集・見える化を行いました。遠隔地のセンサーデータを収集できるため、工場やビル等の広い敷地内でも一括で監視することができます。
環境データ以外にも電力値や接点情報等、様々なセンサーデータで収集できるので、是非チャレンジしてみてください。