Armadilloフォーラム

node-redコンテナにBLE beacon scannerをインストールしたい

y.shimizu

2025年6月3日 19時57分

==========
製品型番:AG9130-C03Z
Debian/ABOSバージョン:3.21.3-at.5
カーネルバージョン:5.10.235-1-at
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
お世話になっております。
node-redで、BLEの信号を受け取りたいと考えております。
BLE信号を受け取るために、BLE beacon scannerを使用したいと考えております。
必要なパッケージのインストールは行ったのですが、Node-red上で使用できず、BLE beacon Scannerのインストールの手順を教えていただけないでしょうか。

# 以下のリンクから、node-redのコンテナをインストールし、USBディスクを用いてA9E内にアップデートを行いました。
https://armadillo.atmark-techno.com/resources/software/armadillo-iot-a9e/node-red-container
 
podman exec -it node-red /bin/bash
[コンテナ内]apt-get update && apt-get install -y bluetooth bluez libbluetooth-dev
[コンテナ内]npm install --unsafe-perm node-red-contrib-noble

よろしくお願いいたします。

コメント

at_reika.yamazaki

2025年6月3日 20時16分

お世話になっております。山崎です。

実行コマンドをみたところ、パッケージのインストール後にコンテナイメージの更新がされていないため、コンテナを起動したときにインストール時のコンテナイメージが起動しているのではと思われます。
コンテナ内にパッケージをインストール後、コンテナから exit して、以下を参考にコンテナイメージの更新を試してください。

podman commit node-red localhost/node-red:<使用中のコンテナイメージのバージョン>

使用中のコンテナイメージのバージョンは、最新の場合は 1.2.1 になります。
更新後、コンテナを再起動して Node-RED 上でインストールした node が使用できるか確認してください。
再起動のコマンドは以下です。

podman_start node-red

以上、どうぞよろしくお願いいたします。

podman commit node-red localhost/node-red:1.2.1
podman_start node-red

を実施しましたが、インストールしたnode-red上でインストールしたnodeが使用できませんでした。

追記の手順として、以下のような、confファイルを作成しました。
node-redのコンテナ内では、Bluetoothctlを実行できる状態になっております。
node-redのweb画面で、パレットの管理-ノードの追加から、BLE beacon Scannerを追加しましたが、スクリーンショット 2025-06-04 205117.pngのようになってしまいます。

対応策をご教示いただけますでしょうか。
また、A6Eのときにございました、https://armadillo.atmark-techno.com/resources/software/armadillo-iot-a6…
のような参考になるコンテナイメージファイルをいただけないでしょうか。

よろしくお願いいたします。

image="node-red:1.2.1"
set_image "$image"
set_network host
 
add_devices /dev/gpiochip*
add_devices /dev/i2c-*
add_devices /dev/ttyrpmsg*
add_hotplugs input ttyUSB video4linux
set_command sleep infinity
add_volumes /sys/class/leds/:/sys/class/leds/
add_volumes /sys/devices/platform/leds/leds:/sys/devices/platform/leds/leds/
add_volumes /sys/class/thermal/thermal_zone0/:/sys/class/thermal/thermal_zone0/
add_volumes /sys/bus/iio/devices/:/sys/bus/iio/devices/
add_volumes /etc/localtime:/etc/localtime:ro
 
add_volumes /var/app/rollback/volumes/node-red/root:/root
add_volumes /var/app/rollback/volumes/node-red/log:/log
add_volumes /var/app/rollback/volumes/node-red/cert:/cert
add_volumes /dev/shm:/dev/shm
 
add_args --env=AT_SERIAL_NUMBER=$(device-info -s)
add_args --env=EX_SSS_BOOT_SSS_PORT=/dev/i2c-6:0x48
add_args --env=OPENSSL_CONF=/etc/plug-and-trust/openssl11_sss_se050.cnf
 
add_args --cap-add=NET_ADMIN
 
add_ports 1880:1880
 
set_command node /usr/lib/node_modules/node-red/red.js
ファイル ファイルの説明
スクリーンショット 2025-06-04 205117.png

at_reika.yamazaki

2025年6月5日 13時26分

お世話になっております。山崎です。
node-red-contrib-blebeacon-scanner の詳細を確認したところ、以下のパッケージが必要とありました。

apt install -y make g++ libbluetooth-dev libudev-dev
npm install @abandonware/noble

こちらの環境では上記のパッケージをインストールした後に、Node-RED の GUI から node-red-contrib-blebeacon-scanner を追加したところ、使用できることを確認しました。
インストール後にコンテナの更新、再起動後に、 node-red-contrib-blebeacon-scanner を追加して問題なく使用できるか試してみていただけますでしょうか?

以上、どうぞよろしくお願いいたします。

教えていただいた方法で、Node-RED の GUI から node-red-contrib-blebeacon-scanner を追加することができました。
module not foundはでなくなりました。
ありがとうございます。

A9E周辺のBLEのメッセージを受信できることを期待し、
BLE Beacon Scannerにdebugのノード(debug2)を接続しました。
添付のスクリーンショットのようなフローを作成しましたが、debug2のログに表示がありませんでした。

ノードにauthrize erorがでていて、hci0がマウントされていないと思い起動ファイルにadd_volumesを書き加えました。
しかし、コンテナ内の/devを参照したところ、hci0のデバイスファイルが存在していませんでした。
マウントできていないのでしょうか。

想定される原因と解決方法を教えてください。

以下、node-red.conf

...
add_devices /dev/gpiochip*
add_devices /dev/i2c-*
add_devices /dev/ttyrpmsg*
add_hotplugs input ttyUSB video4linux
set_command sleep infinity
add_volumes /sys/class/leds/:/sys/class/leds/
add_volumes /sys/devices/platform/leds/leds:/sys/devices/platform/leds/leds/
add_volumes /sys/class/bluetooth/hci0:/sys/class/bluetooth/hci0 #ここ追加
add_volumes /sys/class/thermal/thermal_zone0/:/sys/class/thermal/thermal_zone0/
add_volumes /sys/bus/iio/devices/:/sys/bus/iio/devices/
add_volumes /etc/localtime:/etc/localtime:ro
...
ファイル ファイルの説明
スクリーンショット 2025-06-05 162443.png node-redのフロー
20250603_node-red.log node-redコンテナのログ

at_reika.yamazaki

2025年6月5日 18時57分

お世話になっております。山崎です。
念のため確認です。ログをみたところ、root ユーザ、もしくは sudo で実行するとありますが、root ユーザで実行されているでしょうか?
また「hciconfig hci0 up」を実行した場合は hci0 は現れるでしょうか?
試していただけますと幸いです。
以上、どうぞよろしくお願いいたします。

rootユーザでの実行とは、node-redの起動をrootユーザで実行するということでしょうか。
それとも、node-redコンテナの起動をrootユーザで実行するということでしょうか。

コンテナ内でhciconfig hci0 upを実行したときのコンテナのCLIを添付いたします。

root@a9e-test:~# hciconfig hci0 up
root@a9e-test:~# hciconfig hci0
hci0:   Type: Primary  Bus: UART
        BD Address: FC:84:A7:51:FA:A9  ACL MTU: 1021:7  SCO MTU: 120:6
        UP RUNNING
        RX bytes:285533 acl:0 sco:0 events:5065 errors:0
        TX bytes:3656 acl:0 sco:0 commands:190 errors:0

アットマークテクノの古賀(休日モード)です。

y.shimizuさん:
>コンテナ内でhciconfig hci0 upを実行したときのコンテナのCLIを添付いたします。

root@a9e-test:~# hciconfig hci0 up
root@a9e-test:~# hciconfig hci0
hci0:   Type: Primary  Bus: UART
        BD Address: FC:84:A7:51:FA:A9  ACL MTU: 1021:7  SCO MTU: 120:6
        UP RUNNING
        RX bytes:285533 acl:0 sco:0 events:5065 errors:0
        TX bytes:3656 acl:0 sco:0 commands:190 errors:0

次のようにするとどうなるか、試してみていただけますか?

(1) コンテナ内で、次のコマンドを実行する

# hciconfig hci0 down
# hciconfig hci0 up

(2) Node-RED エディタで、お使いのフローをデプロイし直す

もし、これで受信できるようになれば、別のお客様から相談を頂いて調査中の問題と同じ要因だと思われます。
ひとまず、切り分けのために上記を確認してみて頂けますと幸いです。

以上、お手数をかけまして恐縮ですが、どうぞ宜しくお願いします。

node-red.conf内にadd_args --cap-add=NET_RAWを追記したところ、Node-red上で受け取ることができました。
Node-redコンテナを削除し、またコンテナを入れなおし改めて手順通り行いましたが受け取ることができなくなりました。

また、(1)(2)を行いましたが、Node-RED上のBLE beacon Scannerで反応がありません。
Node-RED上では添付の写真のように起動しているのように思えますが、接続しているデバックノードでは、何も表示がなされません。
また、Podman logs node-redでログを確認しましたが、問題なさそうに思えます。

a9e-test:~# podman logs node-red
1 Jan 00:00:17 - [info]
 
Welcome to Node-RED
===================
 
1 Jan 00:00:17 - [info] Node-RED version: v4.0.2
1 Jan 00:00:17 - [info] Node.js  version: v20.19.0
1 Jan 00:00:17 - [info] Linux 5.10.235-1-at arm64 LE
1 Jan 00:00:19 - [info] Loading palette nodes
9 Jun 02:03:16 - [info] Dashboard version 3.6.5 started at /ui
9 Jun 02:03:18 - [info] Settings file  : /root/.node-red/settings.js
9 Jun 02:03:18 - [info] HTTP Static    : /log > /
9 Jun 02:03:18 - [info] Context store  : 'default' [module=memory]
9 Jun 02:03:18 - [info] User directory : /root/.node-red
9 Jun 02:03:18 - [warn] Projects disabled : editorTheme.projects.enabled=false
9 Jun 02:03:18 - [info] Flows file     : /root/.node-red/flows.json
9 Jun 02:03:18 - [warn]
 
---------------------------------------------------------------------
Your flow credentials file is encrypted using a system-generated key.
 
If the system-generated key is lost for any reason, your credentials
file will not be recoverable, you will have to delete it and re-enter
your credentials.
 
You should set your own key using the 'credentialSecret' option in
your settings file. Node-RED will then re-encrypt your credentials
file using your chosen key the next time you deploy a change.
---------------------------------------------------------------------
 
9 Jun 02:03:18 - [warn] Encrypted credentials not found
9 Jun 02:03:18 - [info] Server now running at http://127.0.0.1:1880/
9 Jun 02:03:18 - [info] Starting flows
9 Jun 02:03:18 - [info] Started flows
9 Jun 03:36:45 - [info] Stopping flows
9 Jun 03:36:45 - [info] Stopped flows
9 Jun 03:36:45 - [info] Updated flows
9 Jun 03:36:45 - [info] Starting flows
9 Jun 03:36:45 - [info] Started flows
ファイル ファイルの説明
スクリーンショット 2025-06-09 124038.png

取得できました。
BLE Beacon Scannerのgithub(https://github.com/joeldavidw/node-red-contrib-beacon-scanner?tab=readm…)を参照したところ、
setcap cap_net_raw+eip $(eval readlink -f `which node`)の記述がありました。
これを実行し、コンテナの再起動を行い、以下の手順を行ったところNode-red内でBLEのメッセージの受信が行えました。

# コンテナ内
apt update
apt install libcap2-bin
setcap cap_net_raw+eip $(eval readlink -f `which node`)
exit
podman commit node-red localhost/node-red:1.2.1
podman 
podman_start node-red
podman exec -it node-red /bin/bash
hciconfig hci0 down
hciconfig hci0 up
rm /run/dbus/pid
dbus-daemon --system
/usr/libexec/bluetooth/bluetoothd &
bluetoothctl
[bluetooth]power on
[bluetooth]scan on

ありがとうございました。

at_reika.yamazaki

2025年6月9日 14時41分

お世話になっております。山崎です。

>setcap cap_net_raw+eip $(eval readlink -f `which node`)の記述がありました。
これを実行し、コンテナの再起動を行い、以下の手順を行ったところNode-red内でBLEのメッセージの受信が行えました。

報告ありがとうございます。無事に受信できたということで了解です。
一点確認ですが、こちらご使用の conf ファイルには、add_args --cap-add=NET_RAW は追加済みという認識で相違ないでしょうか?

また、無事に動作したということで不要かもしれないですが、A9E 用の漏水監視システムコンテナを用意する予定です。
もし、リリースしましたら改めてご連絡致します。

以上、どうぞよろしくお願いいたします。

はい。
confファイルに追加済みです。
以下、confファイルになります。

a9e-test:~# cat /etc/atmark/containers/node-red.conf
image="node-red:1.2.1"
set_image "$image"
 
add_devices /dev/gpiochip*
add_devices /dev/i2c-*
add_devices /dev/ttyrpmsg*
add_hotplugs input ttyUSB video4linux
 
add_volumes /sys/class/leds/:/sys/class/leds/
add_volumes /sys/devices/platform/leds/leds:/sys/devices/platform/leds/leds/
add_volumes /sys/class/thermal/thermal_zone0/:/sys/class/thermal/thermal_zone0/
add_volumes /sys/bus/iio/devices/:/sys/bus/iio/devices/
add_volumes /etc/localtime:/etc/localtime:ro
add_volumes /sys/class/bluetooth/hci0:/sys/class/bluetooth/hci0 #ここ追加
add_volumes /var/app/rollback/volumes/node-red/root:/root
add_volumes /var/app/rollback/volumes/node-red/log:/log
add_volumes /var/app/rollback/volumes/node-red/cert:/cert
add_volumes /dev/shm:/dev/shm
 
add_args --env=AT_SERIAL_NUMBER=$(device-info -s)
add_args --env=EX_SSS_BOOT_SSS_PORT=/dev/i2c-6:0x48
add_args --env=OPENSSL_CONF=/etc/plug-and-trust/openssl11_sss_se050.cnf
 
set_network host #ここ追加
add_args --cap-add=NET_ADMIN #ここ追加
add_args --cap-add=NET_RAW #ここ追加
 
 
add_ports 1880:1880
 
set_command node /usr/lib/node_modules/node-red/red.js

A9E 用の漏水監視システムコンテナを用意する予定とのこと、ありがとうございます。
ご連絡お待ちしております。

よろしくお願いいたします。

at_reika.yamazaki

2025年6月9日 15時00分

お世話になっております。山崎です。

>confファイルに追加済みです。
こちら了解です。

>以下、confファイルになります。
conf ファイルに内容についてもご連絡ありがとうございます。

A9E 用の漏水監視システムコンテナについては今月末のリリースを予定しておりますため、今しばらくお待ちいただけますと幸いです。
以上、どうぞよろしくお願いいたします。

お世話になっております。
助言をいただきたいです。

現状の手順だと、Node-red上でBLE beacon scannerでBLEのメッセージを受け取るには、コンテナ内でbluetootnctlを起動しなければなりません。
これをスクリプトとして実行しているのですが、うまくいきません。
具体的には、node-red上のexecノードにてパスを設定しています。
injectノード ---- execノード

スクリプトの起動自体はできておりますが、node-redでBLE beacon scannerを使用するためには、node-redのフローを起動するたびにデプロイしないといけません。
node-REDのフローを毎回デプロイせずにble-beacon-scannerを起動させるためのアドバイスをいただけませんでしょうか。

このスクリプトは、node-red.confにadd_volumes /var/app/rollback/volumes/node-red/blescan.sh:/etc/blescan.shとして追加しております。

# blescan.sh
#!/bin/bash
 
echo "[blescan.sh] hci0 down"
hciconfig hci0 down
 
echo "[blescan.sh] hci0 up"
hciconfig hci0 up
 
echo "[blescan.sh] rm pid"
rm /run/dbus/*
 
 
echo "[blescan.sh] dbus start"
dbus-daemon --system &
 
sleep 5
 
echo "[blescan.sh] bluetooth start"
/usr/libexec/bluetooth/bluetoothd &
 
echo "[blescan.sh] sleep"
sleep 10
 
 
echo "[blescan.sh]bluetoothctl off "
bluetoothctl power off
 
echo "[blescan.sh] power on"
bluetoothctl power on
 
echo "[blescan.sh] scan on"
bluetoothctl scan on

アットマークテクノの古賀です。取り急ぎ、一点確認させてください。

y.shimizuさん:
>助言をいただきたいです。
>
>現状の手順だと、Node-red上でBLE beacon scannerでBLEのメッセージを受け取るには、コンテナ内でbluetootnctlを起動しなければなりません。
>これをスクリプトとして実行しているのですが、うまくいきません。
>具体的には、node-red上のexecノードにてパスを設定しています。
>injectノード ---- execノード

>このスクリプトは、node-red.confにadd_volumes /var/app/rollback/volumes/node-red/blescan.sh:/etc/blescan.shとして追加しております。

このスクリプト(blescan.sh)を exec ノードで実行していらっしゃる、ということですね。
確認ですが、上記の exec ノードの前段にある inject ノードは、プロパティの「Node-RED起動の [] 秒後、以下を行う」を設定して、フローの起動時に自動実行されるように設定していらっしゃるでしょうか?

>スクリプトの起動自体はできておりますが、node-redでBLE beacon scannerを使用するためには、node-redのフローを起動するたびにデプロイしないといけません。
>node-REDのフローを毎回デプロイせずにble-beacon-scannerを起動させるためのアドバイスをいただけませんでしょうか。

フローの起動時に、inject ノード + exec ノードの組み合わせで blescan.sh が自動実行されるようにしていらっしゃるにも関わらず、フローをデプロイし直さないと BLE 受信できない、ということであれば、六つ前のコメントで書いた、他のお客様から相談を頂いて調査中の問題と同じ要因だと思われます:
 https://armadillo.atmark-techno.com/forum/armadillo/25815#comment-20056

もし、同じ問題なのであれば、こちらで調査して解決出来次第、お知らせします。
お手数を掛けまして申し訳ありませんが、どうぞ宜しくお願いします。

>このスクリプト(blescan.sh)を exec ノードで実行していらっしゃる、ということですね。
>確認ですが、上記の exec ノードの前段にある inject ノードは、プロパティの「Node-RED起動の [] 秒後、以下を行う」を設定して、フローの起動時に自動実行されるように設定していらっしゃるでしょうか?

はい。前段にinjectノードを設定し、プロパティの「Node-RED起動の [0.1] 秒後、以下を行う」フローの起動時に自動実行するように設定しております。

>フローの起動時に、inject ノード + exec ノードの組み合わせで blescan.sh が自動実行されるようにしていらっしゃるにも関わらず、フローをデプロイし直さないと BLE 受信できない、ということであれば、六つ前のコメントで書いた、他のお客様から相談を頂いて調査中の問題と同じ要因だと思われます

理解不足で申し訳ありません。
調査のほどよろしくお願いいたします。

at_reika.yamazaki

2025年6月12日 17時00分

お世話になっております。山崎です。

一点試してみていただきたいことがあります。
作成していただいた blescan.sh ですが、コンテナの設定ファイル(node-red.conf)から直接実行するとどうなるか試していただけますと助かります。
以下手順です。

1. Node-RED 上から blescan.sh を実行するノードを無効にする
2以降の手順が有効か判断するため、一時的に無効にして、デプロイしてください。

2. blescan.sh の修正を以下のように修正
★が変更点です。

# blescan.sh
#!/bin/bash
 
echo "[blescan.sh] hci0 down"
hciconfig hci0 down
 
echo "[blescan.sh] hci0 up"
hciconfig hci0 up
 
echo "[blescan.sh] rm pid"
rm /run/dbus/*
 
 
echo "[blescan.sh] dbus start"
dbus-daemon --system &
 
sleep 5
 
echo "[blescan.sh] bluetooth start"
/usr/libexec/bluetooth/bluetoothd &
 
echo "[blescan.sh] sleep"
sleep 10
 
 
echo "[blescan.sh]bluetoothctl off "
bluetoothctl power off
 
echo "[blescan.sh] power on"
bluetoothctl power on
 
#echo "[blescan.sh] scan on"★
#bluetoothctl scan on★
 
node /usr/lib/node_modules/node-red/red.js★ コンテナ設定ファイルで行っている set_command の内容を実行

3. コンテナの設定ファイル(node-red.conf)の set_command で /etc/blescan.sh を呼び出すように修正

#set_command node /usr/lib/node_modules/node-red/red.js★
set_command /etc/blescan.sh★

4. Node-RED コンテナの再起動

podman_start node-red

お手数をおかけして大変申し訳ありません。
これで、BLEのメッセージが受け取れるか試してみていただけますと幸いです。
以上、どうぞよろしくお願いいたします

山崎さん

ありがとうございます。

・node-REDのフローの修正
・blescan.shの修正
・node-red.confのset_commandの修正

ご提示いただいた手順を実行しましたが、BLEのメッセージは受信できませんでした。

よろしくお願いいたします。

at_reika.yamazaki

2025年6月12日 17時43分

お世話になっております。山崎です。
>ご提示いただいた手順を実行しましたが、BLEのメッセージは受信できませんでした。
了解です。ご確認ありがとうございます。

blescan.sh の修正ですが、念のため、以下のように変えても変化がないかご確認いただけますと助かります。

# blescan.sh
#!/bin/bash
 
echo "[blescan.sh] hci0 down"
hciconfig hci0 down
 
echo "[blescan.sh] hci0 up"
hciconfig hci0 up
 
echo "[blescan.sh] rm pid"
rm /run/dbus/*
 
 
echo "[blescan.sh] dbus start"
dbus-daemon --system &
 
sleep 5
 
echo "[blescan.sh] bluetooth start"
/usr/libexec/bluetooth/bluetoothd &
 
echo "[blescan.sh] sleep"
sleep 10
 
 
#echo "[blescan.sh]bluetoothctl off " ★コメントアウト
#bluetoothctl power off ★コメントアウト
 
echo "[blescan.sh] power on"
bluetoothctl power on
 
#echo "[blescan.sh] scan on"★コメントアウト
#bluetoothctl scan on★コメントアウト
 
node /usr/lib/node_modules/node-red/red.js★ コンテナ設定ファイルで行っている set_command の内容を実行

他の手順については先にコメントした通りで大丈夫です。
お手数をおかけして申し訳ありませんが、どうぞよろしくお願いいたします。

頂いた内容でblescan.shの内容を再度修正しました。
BLEのメッセージは受け取れませんでした。

よろしくお願いいたします。

at_reika.yamazaki

2025年6月12日 17時58分

お世話になっております。山崎です。
受け取れなかったということで了解です。ご確認ありがとうございます。
また試していただきたいことがでましたらご連絡いたします。
すみませんが、どうぞよろしくお願いいたします。

承知いたしました。
ありがとうございます。
引き続きよろしくお願いいたします。