OTBR 2.15.3 not starting

I have an issue getting OTBR starting up correctly. A number of measures to change the baud rate, hardware flow, reinstallation of the addon (also disabling any ZHA) as well as reinstallation of the firmware of Skyconnect both in home assistant and using the web version without success. Also tried with an extension cable. OTBR is consistently stopping after some attempt with the log below. I’m desperate, any inputs are appreciated:

Configuration:
device: >-
/dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_b2201cb1a3b3ed1180094eaca7669f5d-if00-port0
baudrate: “460800”
flow_control: true
otbr_log_level: notice
firewall: true
nat64: true

Log:


Add-on: OpenThread Border Router
OpenThread Border Router add-on

Add-on version: 2.15.3
You are running the latest version of this add-on.
System: Debian GNU/Linux 12 (bookworm) (amd64 / qemux86-64)
Home Assistant Core: 2025.12.3
Home Assistant Supervisor: 2025.12.3

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 otbr-agent: starting
[12:54:34] WARNING: No primary network interface found! Using static eth0.
[12:54:34] INFO: Setup OTBR firewall…
[12:54:34] INFO: Migrating OTBR settings if needed…
2025-12-17 12:54:34 HomeAssistant asyncio[227] DEBUG Using selector: EpollSelector
2025-12-17 12:54:34 HomeAssistant zigpy.serial[227] DEBUG Opening a serial connection to ‘/dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_b2201cb1a3b3ed1180094eaca7669f5d-if00-port0’ (baudrate=460800, xonxoff=False, rtscts=True)
2025-12-17 12:54:34 HomeAssistant serialx.platforms.serial_posix[227] DEBUG Configuring serial port ‘/dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_b2201cb1a3b3ed1180094eaca7669f5d-if00-port0’
2025-12-17 12:54:34 HomeAssistant serialx.platforms.serial_posix[227] DEBUG Configuring serial port: [0, 0, 2147486896, 0, 4100, 4100, [b’\x03’, b’\x1c’, b’\x7f’, b’\x15’, b’\x04’, 0, 0, b’\x00’, b’\x11’, b’\x13’, b’\x1a’, b’\x00’, b’\x12’, b’\x0f’, b’\x17’, b’\x16’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’, b’\x00’]]
2025-12-17 12:54:34 HomeAssistant serialx.platforms.serial_posix[227] DEBUG Setting low latency mode: True
2025-12-17 12:54:34 HomeAssistant serialx.platforms.serial_posix[227] DEBUG Setting modem pins: ModemPins[dtr rts]
2025-12-17 12:54:34 HomeAssistant serialx.platforms.serial_posix[227] DEBUG Setting TIOCMBIS: 0x00000006
2025-12-17 12:54:34 HomeAssistant zigpy.serial[227] DEBUG Connection made: <serialx.platforms.serial_posix.PosixSerialTransport object at 0x70b5e4c2a490>
2025-12-17 12:54:34 HomeAssistant universal_silabs_flasher.spinel[227] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=0, network_link_id=0, flag=2), command_id=<CommandID.RESET: 1>, data=b’\x02’)
2025-12-17 12:54:34 HomeAssistant universal_silabs_flasher.spinel[227] DEBUG Sending data b’~\x80\x01\x02\xea\xf0~’
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Immediately writing b’~\x80\x01\x02\xea\xf0~’
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Sent 7 of 7 bytes
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Event loop woke up reader
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Received b’~\x80\x06\x00p\xeet~’
2025-12-17 12:54:34 HomeAssistant universal_silabs_flasher.spinel[227] DEBUG Decoded HDLC frame: HDLCLiteFrame(data=b’\x80\x06\x00p’)
2025-12-17 12:54:34 HomeAssistant universal_silabs_flasher.spinel[227] DEBUG Parsed frame SpinelFrame(header=SpinelHeader(transaction_id=0, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_IS: 6>, data=b’\x00p’)
2025-12-17 12:54:34 HomeAssistant universal_silabs_flasher.spinel[227] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x08’)
2025-12-17 12:54:34 HomeAssistant universal_silabs_flasher.spinel[227] DEBUG Sending data b’~\x83\x02\x08\xbc\x9a~’
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Immediately writing b’~\x83\x02\x08\xbc\x9a~’
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Sent 7 of 7 bytes
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Event loop woke up reader
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Received b’~\x83\x06\x08\xbc\x02n\xff\xfe\xd0\xf2h\x0ec~’
2025-12-17 12:54:34 HomeAssistant universal_silabs_flasher.spinel[227] DEBUG Decoded HDLC frame: HDLCLiteFrame(data=b’\x83\x06\x08\xbc\x02n\xff\xfe\xd0\xf2h’)
2025-12-17 12:54:34 HomeAssistant universal_silabs_flasher.spinel[227] DEBUG Parsed frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_IS: 6>, data=b’\x08\xbc\x02n\xff\xfe\xd0\xf2h’)
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Closing at the request of the application
2025-12-17 12:54:34 HomeAssistant zigpy.serial[227] DEBUG Waiting for serial port to close
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Closing connection: None
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Closing file descriptor 7
2025-12-17 12:54:34 HomeAssistant serialx.descriptor_transport[227] DEBUG Calling protocol connection_lost with exc=None
2025-12-17 12:54:34 HomeAssistant zigpy.serial[227] DEBUG Connection lost: None
Settings file /data/thread/0_bc026efffed0f268.data is not a valid OTBR settings file, skipping
No existing settings files found, skipping
[12:54:34] 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:///dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_b2201cb1a3b3ed1180094eaca7669f5d-if00-port0?uart-baudrate=460800&uart-flow-control
[NOTE]-AGENT—: Radio URL: trel://eth0
[NOTE]-ILS-----: Infra link selected: eth0
49d.17:17:52.975 [C] P-SpinelDrive-: Software reset co-processor successfully
[WARN]-TrelDns-: Netif eth0 is not ready (No such device), will retry after 5 seconds
00:00:00.030 [C] P-Trel--------: Failed to bind socket to the interface eth0
00:00:00.030 [C] Platform------: PrepareSocket() at trel.cpp:202: No such device
[12:54:34] WARNING: otbr-agent exited with code 5 (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
[12:54:35] 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 banner: 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.
/run/s6/basedir/scripts/rc.init: fatal: stopping the container.
s6-rc: info: service mdns: stopping
Default: mDNSResponder (Engineering Build) (Dec 15 2025 09:14:53) stopping
s6-rc: info: service banner 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
[12:54:35] INFO: mDNS ended with exit code 4 (signal 0)…
s6-rc: info: service mdns successfully stopped
s6-rc: info: service mdns successfully stopped

I don’t have any experience with add-ons, but this seems like the reason it’s not starting:

[12:54:34] WARNING: No primary network interface found! Using static eth0.
...
[NOTE]-ILS-----: Infra link selected: eth0
49d.17:17:52.975 [C] P-SpinelDrive-: Software reset co-processor successfully
[WARN]-TrelDns-: Netif eth0 is not ready (No such device), will retry after 5 seconds
00:00:00.030 [C] P-Trel--------: Failed to bind socket to the interface eth0
00:00:00.030 [C] Platform------: PrepareSocket() at trel.cpp:202: No such device

Is it possible to define the primary network interface somewhere? For instance, I’m using the ownbee/hass-otbr-docker Docker image, and it had an environment variable (BACKBONE_IF) with which you can define the network interface it should use.

Or maybe IPv6 is disabled

The official OTBR addon doesn’t expose BACKBONE_IF. I have another installation using Proxmox/HAOS and there also OTBR gives the same errors and stops. The network adapter in the supervisor case is set to autoconfigure with vmbro(Detected: vmbr0 (192.168.xxxx/24, fe80::dad3:85ff:xxxx/64)). IPv6 looks alright to me.

Maybe your vmbr0 have a block for IPv6.
I, and many many other, are running HAOS on Proxmox with OTBR server too, so it it is possible.

It looks like it’s called OT_INFRA_IF there: Docker Install  |  OpenThread

I tend to agree that Netif eth0 is not ready (No such device) is the problem.

If you can ssh into your HA system, type ip link and see if there are any interfaces with the name starting with e or en like eth0, enp1s0, etc.

ssh into HS system yields two items:
1: lo
2: etho@if34…da:a9:33:70:24:84…

SSH to server directly and invoking the same command:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP mode DEFAULT group default qlen 1000
link/ether d8:d3:85:93:bf:cd brd ff:ff:ff:ff:ff:ff
altname enp0s25
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether d8:d3:85:93:bf:cd brd ff:ff:ff:ff:ff:ff
4: hassio: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether be:92:aa:a0:4e:58 brd ff:ff:ff:ff:ff:ff
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether f6:4e:f8:29:69:d2 brd ff:ff:ff:ff:ff:ff
6: veth3eb7772@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master hassio state UP mode DEFAULT group default

What is “HS System”?
When you say “server directly” are you talking Debian/Bookworm?

Did you find a solution this? I have exactly the same problem.

OTBR fails to start on HA OS boot, but if I right after start the add-on manually it works. Below is the difference from log file when it fails vs. succeeds. For some reason there is a difference in the Radio URL…

[NOTE]-AGENT—: Radio URL: trel://eth0

[NOTE]-ILS-----: Infra link selected: eth0

49d.17:04:22.039 [C] P-SpinelDrive-: Software reset co-processor successfully

[WARN]-TrelDns-: Netif eth0 is not ready (No such device), will retry after 5 seconds

00:00:00.044 [C] P-Trel--------: Failed to bind socket to the interface eth0

00:00:00.044 [C] Platform------: PrepareSocket() at trel.cpp:202: No such device

[09:08:37] WARNING: otbr-agent exited with code 5 (by signal 0).


[NOTE]-AGENT—: Radio URL: trel://end0

[NOTE]-ILS-----: Infra link selected: end0

49d.18:08:09.521 [C] P-SpinelDrive-: Software reset co-processor successfully

00:00:00.046 [N] RoutingManager: BR ULA prefix: fd4a:8f4f:fcfb::/48 (loaded)

00:00:00.046 [N] RoutingManager: Local on-link prefix: fd1e:a92e:c387:faee::/64

You network device in the other end is slow to negotiate the connection settings, so HA report it as not available.