ボーダールーター構築手順 - azarashin/MatterChipToolMonitor GitHub Wiki
- https://openthread.io/guides/border-router/build?hl=ja
- https://openthread.io/codelabs/openthread-hardware?hl=ja#1
を参考にしてボーダールーターの構築を試みた。
環境
- Raspberry PI 4(RPI4)
- Ubuntu 22.04
- Nordic nRF52840 MDK USB Dongle - マイクロ開発キット
- WindowsPC
- Windows 10
RCP デバイスの構築
nRF52840 USB ドングルイメージの作成
https://openthread.io/codelabs/openthread-hardware?hl=ja#1
RPI4 上で下記を実行する。
$ git clone https://github.com/openthread/ot-nrf528xx
$ cd ot-nrf528xx
$ git checkout e41174a
$ git submodule update --init
$ ./script/bootstrap
$ ./script/build nrf52840 USB_trans -DOT_BOOTLOADER=USB
$ arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex
出来上がったot-rcp.hex はWindowsPC に転送しておく。
書き込み
nRF-Connectインストール
WindowsPC にnRF-Connect をインストールする。 インストール後、アプリを起動したらProgrammer のOpenをクリックする。
nRF52840 選択
以下の画面がでてくるので、nRF52840 USBドングルをWindowsPC に装着して画面のSELECT DEVICE をクリックする。
リスト中にnRF528xx OpenThread... というアイテムがでてきていたら、これを選択する。
もしnRF528xx OpenThread... が出てこない場合、別の品番のUSBドングルを使用する必要があるかもしれない。 例えば、下記のドングルはダメだった。
リセットボタンを押す
もし下記のようなCaution が表示された場合、USB ドングルのリセットボタンを押す。
リセットボタンはこれ。
焼き込みイメージ選択
上述したot-rcp.hex をドラッグ&ドロップし、Write ボタンをクリックする。
書き込みが完了したらUSBドングルを外してRPI4に刺しなおす。
RPI4 上でのデバイス認識確認
RPI4 上で下記を実行する。
$ ls /dev/tty*
...
/dev/ttyACM0
...
/dev/ttyACM0 (またはこれに相当するもの)が表示されていればOK.
OTBR の動作確認
OTBR インストール
RPI4 上で下記を実行する。
$ git clone https://github.com/openthread/ot-br-posix
$ cd ot-br-posix
$ git checkout 98dda6c
$ ./script/bootstrap
$ INFRA_IF_NAME=wlan0 ./script/setup
この後一度RPI4 を再起動する。
サービス起動確認
再起動後、下記を実行してサービス起動を確認する。
$ sudo service otbr-agent status
を実行してサービスの起動を確認する。
$ sudo service otbr-agent status
● otbr-agent.service - OpenThread Border Router Agent
Loaded: loaded (/usr/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
Active: active (running) since Sun 2024-08-04 18:33:06 JST; 5min ago
Process: 5098 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
Main PID: 5104 (otbr-agent)
Tasks: 1 (limit: 3863)
Memory: 1.0M (peak: 2.1M)
CPU: 929ms
CGroup: /system.slice/otbr-agent.service
mq5104 /usr/sbin/otbr-agent -I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM0 trel://wlan0
Aug 04 18:37:40 raspberrypi4 otbr-agent[5104]: 00:04:34.110 [I] MeshForwarder-: src:[fe80:0:0:0:ccef:f360:27b6:fc22]:19788
Aug 04 18:37:40 raspberrypi4 otbr-agent[5104]: 00:04:34.110 [I] MeshForwarder-: dst:[ff02:0:0:0:0:0:0:1]:19788
Aug 04 18:37:54 raspberrypi4 otbr-agent[5104]: 00:04:47.736 [I] Mle-----------: Send Advertisement (ff02:0:0:0:0:0:0:1)
Aug 04 18:37:54 raspberrypi4 otbr-agent[5104]: 00:04:47.743 [I] MeshForwarder-: Sent IPv6 UDP msg, len:90, chksum:8ab9, ecn:no, to:0xffff, sec:no, prio:net
Aug 04 18:37:54 raspberrypi4 otbr-agent[5104]: 00:04:47.743 [I] MeshForwarder-: src:[fe80:0:0:0:ccef:f360:27b6:fc22]:19788
Aug 04 18:37:54 raspberrypi4 otbr-agent[5104]: 00:04:47.743 [I] MeshForwarder-: dst:[ff02:0:0:0:0:0:0:1]:19788
Aug 04 18:38:03 raspberrypi4 otbr-agent[5104]: 00:04:56.274 [I] Mle-----------: Send Advertisement (ff02:0:0:0:0:0:0:1)
Aug 04 18:38:03 raspberrypi4 otbr-agent[5104]: 00:04:56.294 [I] MeshForwarder-: Sent IPv6 UDP msg, len:90, chksum:5ec7, ecn:no, to:0xffff, sec:no, prio:net
Aug 04 18:38:03 raspberrypi4 otbr-agent[5104]: 00:04:56.294 [I] MeshForwarder-: src:[fe80:0:0:0:ccef:f360:27b6:fc22]:19788
Aug 04 18:38:03 raspberrypi4 otbr-agent[5104]: 00:04:56.294 [I] MeshForwarder-: dst:[ff02:0:0:0:0:0:0:1]:19788
ログにエラーが発生していた場合
2024年8月3日時点では下記のエラーが出ていた。 (該当するSHAは 6f3dfdc7a7856086831a4e234812591f2a7cd793)
$ sudo service otbr-agent status
● otbr-agent.service - OpenThread Border Router Agent
Loaded: loaded (/usr/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
Active: active (running) since Sun 2024-08-04 21:21:40 JST; 7s ago
Process: 14522 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
Main PID: 14528 (otbr-agent)
Tasks: 1 (limit: 3863)
Memory: 544.0K (peak: 1.9M)
CPU: 94ms
CGroup: /system.slice/otbr-agent.service
mq14528 /usr/sbin/otbr-agent -I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM0 trel://wlan0
Aug 04 21:21:40 raspberrypi4 otbr-agent[14528]: [NOTE]-AGENT---: Thread interface: wpan0
Aug 04 21:21:40 raspberrypi4 otbr-agent[14528]: [NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyACM0
Aug 04 21:21:40 raspberrypi4 otbr-agent[14528]: [NOTE]-AGENT---: Radio URL: trel://wlan0
Aug 04 21:21:40 raspberrypi4 otbr-agent[14528]: [NOTE]-ILS-----: Infra link selected: wlan0
Aug 04 21:21:40 raspberrypi4 otbr-agent[14528]: [INFO]-RCP_HOS-: OpenThread log level changed to 4
Aug 04 21:21:42 raspberrypi4 otbr-agent[14528]: 50d.05:14:37.830 [W] P-SpinelDrive-: Wait for response timeout
Aug 04 21:21:42 raspberrypi4 otbr-agent[14528]: 50d.05:14:37.830 [I] P-SpinelDrive-: co-processor self reset successfully
Aug 04 21:21:44 raspberrypi4 otbr-agent[14528]: 50d.05:14:39.833 [W] P-SpinelDrive-: Wait for response timeout
Aug 04 21:21:46 raspberrypi4 otbr-agent[14528]: 50d.05:14:41.835 [W] P-SpinelDrive-: Wait for response timeout
Aug 04 21:21:46 raspberrypi4 otbr-agent[14528]: 50d.05:14:41.835 [C] Platform------: Init() at spinel_driver.cpp:82: Failure
この件については下記でも議論されているが、決着がついていない。
https://github.com/home-assistant/addons/issues/3683
otbr-agent サービスが正常に動作していないと、ot-ctl を実行した時にもエラーがでる。
$ ot-ctl
connect session failed: No such file or directory
この件については下記にも言及されているが、解決方法は記述されていない。
https://github.com/openthread/ot-br-posix/issues/644
ブラウザアクセス確認
RPI4 にブラウザからアクセスし、Border Router の管理画面が出てくるのを確認する。 メニューからForm をクリックし、出現したFORM ボタンをクリックする。
下記の画面が表示されれば成功。
credential の確認
RPI4 上で下記のコマンドを実行する。
$ sudo ot-ctl dataset active -x
下記のような出力が得られれば成功。
0e08000000000001000035060004001fffe00708fdbd21c7eb021b760c0402a0f7f8051000112233445566778899aabbccddeeff030e4f70656e54687265616444656d6f0410445f2b5ca6f2a93a55ce570a70efeecb000300000f0208111111112222222201021234
Done
その他
https://qiita.com/kitazaki/items/00fdfbdfc3a8cdb1411e
上記も参考にはなるが、実際の作業手順に対して説明の順序が入れ替わっていて読みづらい。
https://github.com/project-chip/connectedhomeip/blob/master/docs/guides/chip_tool_guide.md
chip-tool については上記を参照。上記にOTBR についての記述もある。
connectedhomeip でのOTBRについての記述は上記を参照。
https://github.com/project-chip/connectedhomeip/blob/master/docs/guides/openthread_rcp_nrf_dongle.md
Dongle についての記述は上記を参照。