下記の記事を参考に、Node-REDを使ってArmadillo-IoT A6Eと温湿度センサをRs-485通信させました。
Armadillo-IoT G4:RS-485でセンサと通信させてみた
機器構成
-
Armadillo-IoT A6E
この記事ではCat.1モデルを使用していますが、Cat.M1モデルおよびWLANモデル・LANモデルでも同様のことが出来ます。 -
Modbus通信でデータ読出し可能な機器
市販の温湿度センサを使用しています。
KKmoonRS485温度湿度 トランスミッタ
機器配線
Armadillo-IoT A6E・センサ・電源の接続構成は以下の通りです。
活線挿抜を行うと故障や事故の原因となりますので、必ずすべての機器の電源を落とした状態で接続してください。
アプリケーション構築
センサとModbusで通信してデータを収集するNode-REDアプリケーションをコンテナ上で構築します。
docker hubで配布されているNode-REDコンテナを使用すると正常にModbuas通信を行う事が出来なかったので、
今回はDebianコンテナをベースに作成することとしました。
コンテナイメージ作成
まずはコンテナイメージ構築のためのDockerfileを格納するための任意のディレクトリを作成します。
[armadillo ~]# mkdir nodered
このディレクトリの中に、Node-REDのインストール等を行うためのスクリプトファイルを格納しておくディレクトリを作成します。
[armadillo ~]# cd nodered
[armadillo ~]# mkdir resources
[armadillo ~]# cd resources
コンテナ内にNode-REDをインストールするためのスクリプトファイルを作成します。
[armadillo ~]# vi set_node_red_serial_a6e.sh
#/bin/bash
apt-get update --allow-releaseinfo-change
apt-get -y upgrade
apt-get install -y curl gcc g++ make
update-ca-certificates --fresh
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | tee /etc/apt/sources.list.d/yarn.list
apt-get update && apt-get install -y nodejs yarn
npm install -g --unsafe-perm node-red
npm install -g --unsafe-perm node-red-contrib-modbus
npm install -g --unsafe-perm node-red-dashboard
Dockerfileを作成します。
[armadillo ~]# cd ..
[armadillo ~]# vi Dockerfile
FROM docker.io/debian:latest
LABEL version="1.0.0"
COPY resources/set_node_red_serial_a6e.sh /
ARG USERNAME=atmark
ARG UID=1000
RUN apt-get update && apt-get upgrade -y \
&& /set_node_red_serial_a6e.sh \
&& apt-get clean \
&& useradd -m -u ${UID} ${USERNAME} \
&& rm /set_node_red_serial_a6e.sh
パーミッションを設定しておきます
[armadillo ~]# chmod +x resources/set_node_red_serial_a6e.sh
コンテナイメージをビルドします
[armadillo ~]# podman build -t mynodered .
ビルドしたイメージが作成されていることを確認します。
[armadillo ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/mynodered latest xxxxxxxxxxxx Less than a second ago 705 MB
ビルドしたイメージを使ってコンテナを自動実行させるためのconfファイルを作成します。
[armadillo ~]# vi /etc/atmark/containers/mynodered.conf
set_image localhost/mynodered:latest
add_devices /dev/ttymxc*
add_ports 1880:1880
set_command node-red
コンテナイメージにmynodered:latestを使用
ttymxc*を使用する権限を付与
ホストの1880番ポートからコンテナの1880番ポートへ転送
コンテナ起動時にnode-redコマンドを実行
confファイルを保存しておくことを忘れないようにしておいてください。
[armadillo ~]# persist_file /etc/atmark/containers/mynodered.conf
ゲートウェイコンテナと同時に動作させることが出来ないので、ゲートウェイコンテナが自動起動しないよう設定変更しておいてください
armadillo:~# vi /etc/atmark/containers/a6e-gw-container.conf
(中略)
set_autostart no
[armadillo ~]# persist_file /etc/atmark/containers/a6e-gw-container.conf
フロー作成
コンテナを起動して、WebブラウザからNode-RED画面にアクセスしフローを編集します。
Modbus ReadノードとModbus Responseノードを使用するとデータの読出しが出来るようになります。
A6EでRS485通信を行う場合はSerial Portを「/dev/ttymxc4」に設定しておく必要があります。
Baud rateなどは対象の機器に合わせて設定してください。
参考として、今回作成したフローを添付します。フローのインポートから使用してください。
Armadillo-IoT A6E RS485通信用フロー
このフローを適用すると、通信が開始されてデータがグラフ化されます。
フロー作成後、コンテナイメージを更新しておきましょう。
[armadillo ~]# podman commit mynodered localhost/mynodered:latest
これで次回以降、起動後すぐにNode-REDが動作します。
また、コンテナイメージとconfファイルを他のA6Eに展開して同じように動作させることが出来ます。