ブログ

Armadillo-IoT A6E:Node-REDでRS-485通信させてみた

at_takuma.fukuda
2023年4月10日 7時00分

下記の記事を参考に、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に展開して同じように動作させることが出来ます。