Armadilloフォーラム

長時間稼働後に BLE スキャンが停止し

hussain

2025年8月5日 14時04分

==========
製品型番:Armadillo-IoT A9E
Debian/ABOSバージョン:Armadillo Base OS 3.21.3-at.5
カーネルバージョン:Linux armadillo 5.10.235-1-at #2-Alpine SMP PREEMPT Tue Apr 1 00:25:06 UTC 2025 aarch64 Linux
3G/LTE モジュール情報 (Debianのみ):–
その他:Ricoh EH D201-センサー(環境)をBLEで受信
==========

問題の概要
Armadillo-IoT A9E で長時間稼働後に BLE スキャンが停止し再起動が必要になる問題

Ricoh D201 センサーからのBLE広告は、コンテナ内のPythonスクリプト(BleakScannerベース)で常時受信できています。しかし、数時間~数十時間の運用後に突然データ受信が途絶え、スクリプト側にもエラー表示や再接続試行のログが一切出ません。センサー自体には問題がなく(別デバイスで正常動作確認済み)、以下のようにArmadilloを再起動すると必ず復帰するため、Armadillo本体Bluetoothモジュール側の何らかのリソース漏れやデッドロックが疑われます。

発生状況と再現性
1. コンテナ起動直後はBLE広告を正常受信
2. 数時間~数十時間後に突如受信停止
3. Pythonプロセスは生存中、ログにも何も出力されず完全にパケットを受け取れない
4. Armadillo本体を再起動すると必ずデータ受信が再開
5. 再起動以外(bluetoothddbus 再起動など)では回復せず

使用コード抜粋

from bleak import BleakScanner
 
class RicohScanner:
    def __init__(self, company_id: int):
        self.company_id = company_id
        self.scanner = None
 
    def detection_callback(self, device, advertisement_data):
        # センサーID・MAC一致時にデコード処理
        …
 
    async def start(self):
        self.scanner = BleakScanner(
            detection_callback=self.detection_callback,
            scanning_mode="active"
        )
        print("▶️ Starting Ricoh scanner...")
        await self.scanner.start()
        try:
            while True:
                await asyncio.sleep(1)
        finally:
            await self.scanner.stop()
            print("🛑 Ricoh scanner stopped")

requirements.txt:

# Write the name of the package that can be installed with pip
# numpy
bleak

app.config:

set_image localhost/{{PROJECT}}:latest
 
# mount app sources and data:
# - /var/app/rollback/volumes can be rolled back on failed
#   upgrades, suitable for application sources and assets.
# - /var/app/volumes is not copied on updates and more suitable
#   for volatile data such as logs and databases.
# - "/vol_app:ro" means to make "/vol_app" read-only.
#   If this is inconvenient, please remove ":ro".
add_volumes /var/app/rollback/volumes/{{PROJECT}}:/vol_app:ro
add_volumes /var/app/volumes/{{PROJECT}}:/vol_data
 
# Allow LED to be written. This is application specific
# and should be changed depending on your needs.
add_volumes /sys:/sys
 
# Allow input to containers and see output from containers
# python bufferizes its output by default when stdout is not a terminal,
# so print() statements would only be printed after a sufficient number
# of messages have accumulated. Force immediate output without flush for
# convenient logging
add_args -it
 
# Add environment variables set by Atmark Techno.
add_armadillo_env
 
# for Bluetooth
add_args --net=host
add_args --cap-add=NET_ADMIN
add_args --privileged
add_volumes /run/dbus/system_bus_socket:/run/dbus/system_bus_socket:ro
add_volumes /var/run/dbus:/var/run/dbus
 
# launch app
# /vol_app/src/main.py is launched
# see container/resources_python/bin/python_launch
set_command python_launch
コメント

at_dominique.m…

2025年8月5日 17時27分

hussain さん

お世話になっています、
マルティネです。

> Ricoh D201 センサーからのBLE広告は、コンテナ内のPythonスクリプト(BleakScannerベース)で常時受信できています。しかし、数時間~数十時間の運用後に突然データ受信が途絶え、スクリプト側にもエラー表示や再接続試行のログが一切出ません。センサー自体には問題がなく(別デバイスで正常動作確認済み)、以下のようにArmadilloを再起動すると必ず復帰するため、Armadillo本体Bluetoothモジュール側の何らかのリソース漏れやデッドロックが疑われます。

お手数をおかけしてすみません、そういう可能性が高いです。

頂いたコードで今夜に再現できるか確認しますが、もし再現できなかった場合のために再現後の「dmesg」の出力を共有していただけますでしょうか。

また、Armadillo IoT A9E に利用している無線モジュールはまだ若くて、頻繁に更新していますので、最新の ABOS にアップデートしていただければ幸いです。
(armadilloサイトからのアップデートを許可している場合は abos-ctrl update コマンドでアップデート可能です)

よろしくお願いします

at_dominique.m…

2025年8月6日 17時30分

マルティネです。

> 頂いたコードで今夜に再現できるか確認しますが、もし再現できなかった場合のために再現後の「dmesg」の出力を共有していただけますでしょうか。

まだ24時間しか経ってませんが、手元では再現しなさそうです。
最新の ABOS 3.22.1-at.1 でファームウェアを更新してますので、こちらの更新で修正されたかもしれませんが、環境依存で再現できないだけの可能性もありますので、大変お手数ですが更新して再び再現したら dmesg の出力をいただければ幸いです。

念の為スキャンを18日まで継続させますので、戻った際に不具合あったらまた報告します。

引き続きよろしくお願いします

> マルティネです。
>
>
> > 頂いたコードで今夜に再現できるか確認しますが、もし再現できなかった場合のために再現後の「dmesg」の出力を共有していただけますでしょうか。
>
> まだ24時間しか経ってませんが、手元では再現しなさそうです。
> 最新の ABOS 3.22.1-at.1 でファームウェアを更新してますので、こちらの更新で修正されたかもしれませんが、環境依存で再現できないだけの可能性もありますので、大変お手数ですが更新して再び再現したら dmesg の出力をいただければ幸いです。
>
> 念の為スキャンを18日まで継続させますので、戻った際に不具合あったらまた報告します。
>
> 引き続きよろしくお願いします

お世話になっております。メンテルのHussain Al Mahmudです。

コードの確認をありがとうございます。結果をお待ちしております。

また、現在、エラーが発生しているArmadilloはお客様環境で稼働中で、Armadillo Twinからのみアクセス可能です。アップデートを行うと稼働中のアプリケーションが停止する恐れがあるため、原因と解決策を明確化したうえでお客様環境にも適用させていただきます。何卒ご了承ください。

代わりに、当社の開発・テスト用Armadillo(同スペック・同OSバージョン)にてアップデートテストおよびdmesgログの取得を実施しました。アップデート手順およびdmesgログを添付しておりますので、お時間のある際にご確認のほどよろしくお願いいたします。

ファイル ファイルの説明
アップデート前のdmesg-A9E.txt
アップデート後のdmesg-A9E.txt

at_dominique.m…

2025年8月7日 14時50分

Hussain Al Mahmudさん

マルティネです。

> また、現在、エラーが発生しているArmadilloはお客様環境で稼働中で、Armadillo Twinからのみアクセス可能です。アップデートを行うと稼働中のアプリケーションが停止する恐れがあるため、原因と解決策を明確化したうえでお客様環境にも適用させていただきます。何卒ご了承ください。

了解しました。

念の為、もう一台の armadillo を同じバージョンに合わせて同じ試験を開始しました。

また、ログに uap0 が書いてましたが、アクセスポイントを設定して無線ランも利用しているであってますか?
同時に利用すると再現する・しない可能性が高いので教えてください。

> 代わりに、当社の開発・テスト用Armadillo(同スペック・同OSバージョン)にてアップデートテストおよびdmesgログの取得を実施しました。アップデート手順およびdmesgログを添付しておりますので、お時間のある際にご確認のほどよろしくお願いいたします。

こちらの dmesg 出力は、スキャンで受信できなくなった後の出力であってますか?
エラーが出力されてませんので、これでしたら bluetoothd のりスタートで復帰できそうですが…

また、NXP のリリースノートを確認しました:
https://www.nxp.com/docs/en/release-note/RN00104.pdf
Armadillo IoT A9E では 「4.6 SDIO-UART IW611/IW612」が対象で、
今回使っていただいた Armadillo Base OS 3.21.3-at.5 のバージョン 18.99.3.p21.10 から最新の 18.99.3.p25.7 までアップデート可能ですので、
advertisement 文字列が長い場合の化ける問題が修正されましたが、やはり情報が少なくて関係あるかどうかは判断できませんので、再現した上でトレースを取得しないと難しいですね。

引き続きよろしくお願いします