Hi all,
I’m trying to use the OpenThread Border Router (OTBR) add-on in Home Assistant 2025.8.1 on Home Assistant OS 16.0 (amd64). I have a Silicon Labs Border Router 2 (SLBZ MR2) running on my network, and I configured the OTBR add-on with the MR2’s IP and port.
However, the OTBR add-on fails to start with the following log messages:
System: Home Assistant OS 16.0 (amd64 / qemux86-64)
Home Assistant Core: 2025.8.1
Home Assistant Supervisor: 2025.08.1
-----------------------------------------------------------
Please, share the above information when looking for help
or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service banner successfully started
s6-rc: info: service universal-silabs-flasher: starting
[19:07:27] INFO: Flashing firmware is disabled
s6-rc: info: service universal-silabs-flasher successfully started
s6-rc: info: service otbr-agent: starting
[19:07:27] INFO: Setup OTBR firewall...
[19:07:28] INFO: Starting otbr-agent...
[NOTE]-AGENT---: Running 0.3.0-b067e5ac-dirty
[NOTE]-AGENT---: Thread version: 1.3.0
[NOTE]-AGENT---: Thread interface: wpan0
[NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///tmp/ttyOTBR?uart-baudrate=460800&uart-init-deassert
[NOTE]-AGENT---: Radio URL: trel://enp0s18
tiocmbic: Inappropriate ioctl for device
[NOTE]-ILS-----: Infra link selected: enp0s18
67d.23:39:21.679 [W] P-SpinelDrive-: Wait for response timeout
67d.23:39:23.681 [W] P-SpinelDrive-: Wait for response timeout
67d.23:39:25.683 [W] P-SpinelDrive-: Wait for response timeout
67d.23:39:25.683 [C] Platform------: Init() at spinel_driver.cpp:83: Failure
67d.23:39:27.685 [W] P-SpinelDrive-: Wait for response timeout
[19:07:36] WARNING: otbr-agent exited with code 1 (by signal 0).
Chain OTBR_FORWARD_INGRESS (0 references)
target prot opt source destination
DROP all -- anywhere anywhere PKTTYPE = unicast
DROP all -- anywhere anywhere match-set otbr-ingress-deny-src src
ACCEPT all -- anywhere anywhere match-set otbr-ingress-allow-dst dst
DROP all -- anywhere anywhere PKTTYPE = unicast
ACCEPT all -- anywhere anywhere
otbr-ingress-deny-src
otbr-ingress-deny-src-swap
otbr-ingress-allow-dst
otbr-ingress-allow-dst-swap
Chain OTBR_FORWARD_EGRESS (0 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
[19:07:36] INFO: OTBR firewall teardown completed.
s6-svlisten1: fatal: /run/s6-rc/servicedirs/otbr-agent failed permanently or its supervisor died
s6-rc: warning: unable to start service otbr-agent: command exited 1
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service universal-silabs-flasher: stopping
s6-rc: info: service socat-otbr-tcp: stopping
/run/s6/basedir/scripts/rc.init: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information.
s6-rc: info: service mdns: stopping
s6-rc: info: service universal-silabs-flasher successfully stopped
/run/s6/basedir/scripts/rc.init: fatal: stopping the container.
2025/08/12 19:07:36 socat[78] W exiting on signal 15
s6-rc: info: service banner: stopping
Default: mDNSResponder (Engineering Build) (Jan 14 2025 21:04:03) stopping
s6-rc: info: service banner successfully stopped
s6-rc: info: service socat-otbr-tcp successfully stopped
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
[19:07:36] INFO: mDNS ended with exit code 4 (signal 0)...
s6-rc: info: service mdns successfully stopped
it seems the add-on is trying to access a local serial interface /tmp/ttyOTBR instead of the IP address of my MR2. Am I misunderstanding how the OTBR add-on works? Is it designed to connect to an external Thread Border Router over the network, or does it only work with locally attached radios?
Thanks for your help!