OpenThread Border Router and ZBT-2 not communicating after power outage

I’m pretty new at integrating Thread with HA and having an issue with a ZBT-2 (firmware 2.4.4.0) and the OTBR integration talking. I’m running on a Home Assistant Green and I had it working and configured with a Eufy door lock, so everything was happy before I had a short power blip today. In my integrations list the ZBT-2 still shows up as happy, however, the border router integration is showing as failed setup.

Here’s the detail info out of the log for OTBR add-on:

Add-on: OpenThread Border Router

OpenThread Border Router add-on


Add-on version: 2.16.0

You are running the latest version of this add-on.

System: Home Assistant OS 17.0 (aarch64 / green)

Home Assistant Core: 2026.1.3

Home Assistant Supervisor: 2026.01.1


I’ve tried actually restarting the HA Green, both with the ZBT-2 plugged in and unplugged, reconnecting it back in after it was fully booted. Tried reloading the add-on, again both with the ZBT-2 plugged in and not.

I’m not really sure where to go next, the logs I’m looking at don’t have something super obvious at least to me. Any ideas would be greatly appreciated.

Any clues in the system log?

Nothing that seems obvious, but it’s possible I’m not looking in the right log, I haven’t had to do all that much troubleshooting to this point.

The OTBR log seems to have stopped hours ago, and hasn’t written anything through multiple reboots which seems odd to me, even with debugging turned on but maybe it only writes when it’s talking to endpoints.

Supervisor doesn’t have any non-info level lines after my modem and router came back

The Host log only makes mention of ZBT-2 when it initializes it, and moves on. No warnings or anything

I’m experiencing the same issue, both with a ZBT-2 USB and a SLZB over IP.
OTBR Logs:

[11:07:54] INFO: Stable mode, enabling mDNSResponder.
[11:07:55] INFO: The otbr-web is disabled.
s6-rc: info: service mdns: starting
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service mdns successfully started
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service banner: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
[11:07:55] INFO: Starting mDNS Responder...
Default: mDNSResponder (Engineering Build) (Jan 28 2026 17:15:03) starting
-----------------------------------------------------------
 Add-on: OpenThread Border Router
 OpenThread Border Router add-on
-----------------------------------------------------------
 Add-on version: 2.16.0
 You are running the latest version of this add-on.
 System: Home Assistant OS 17.0  (amd64 / qemux86-64)
 Home Assistant Core: 2026.1.3
 Home Assistant Supervisor: 2026.01.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 otbr-agent: starting
[11:07:55] INFO: Setup OTBR firewall...
[11:07:55] INFO: Migrating OTBR settings if needed...
2026-02-03 11:07:56 homeassistant asyncio[237] DEBUG Using selector: EpollSelector
2026-02-03 11:07:56 homeassistant zigpy.serial[237] DEBUG Opening a serial connection to '/dev/serial/by-id/usb-Nabu_Casa_ZBT-2_DCB4D90E6C58-if00' (baudrate=460800, xonxoff=False, rtscts=False)
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG Configuring serial port '/dev/serial/by-id/usb-Nabu_Casa_ZBT-2_DCB4D90E6C58-if00'
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG Configuring serial port: [0, 0, 3248, 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']]
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG Setting low latency mode: True
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG Setting modem pins: ModemPins[!dtr !rts]
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG TIOCMBIC: 0x00000006
2026-02-03 11:07:56 homeassistant zigpy.serial[237] DEBUG Connection made: <serialx.platforms.serial_posix.PosixSerialTransport object at 0x7f22bbaa41d0>
2026-02-03 11:07:56 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=0, network_link_id=0, flag=2), command_id=<CommandID.RESET: 1>, data=b'\x02')
2026-02-03 11:07:56 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x80\x01\x02\xea\xf0~'
2026-02-03 11:07:56 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x80\x01\x02\xea\xf0~'
2026-02-03 11:07:56 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-03 11:07:56 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-03 11:07:56 homeassistant serialx.descriptor_transport[237] DEBUG Received b'\xa0T}:~'
2026-02-03 11:07:56 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to decode HDLC chunk bytearray(b'\xa0T}:')
2026-02-03 11:07:58 homeassistant universal_silabs_flasher.spinel[237] DEBUG Device did not respond to reset, continuing
2026-02-03 11:07:58 homeassistant universal_silabs_flasher.spinel[237] 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')
2026-02-03 11:07:58 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:07:58 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:07:58 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-03 11:08:00 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08'), trying again in 0.10s (attempt 1 of 3)
2026-02-03 11:08:00 homeassistant universal_silabs_flasher.spinel[237] 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')
2026-02-03 11:08:00 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:08:00 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:08:00 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-03 11:08:02 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08'), trying again in 0.10s (attempt 2 of 3)
2026-02-03 11:08:02 homeassistant universal_silabs_flasher.spinel[237] 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')
2026-02-03 11:08:02 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:08:02 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:08:02 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-03 11:08:04 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08'), trying again in 0.10s (attempt 3 of 3)
2026-02-03 11:08:04 homeassistant serialx.descriptor_transport[237] DEBUG Closing at the request of the application
2026-02-03 11:08:04 homeassistant zigpy.serial[237] DEBUG Waiting for serial port to close
2026-02-03 11:08:04 homeassistant serialx.descriptor_transport[237] DEBUG Closing connection: None
2026-02-03 11:08:04 homeassistant serialx.descriptor_transport[237] DEBUG Closing file descriptor 7
2026-02-03 11:08:04 homeassistant serialx.descriptor_transport[237] DEBUG Calling protocol `connection_lost` with exc=None
2026-02-03 11:08:04 homeassistant zigpy.serial[237] DEBUG Connection lost: None
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/dist-packages/universal_silabs_flasher/spinel.py", line 260, in send_frame
    return await asyncio.shield(future)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
asyncio.exceptions.CancelledError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/usr/local/bin/migrate_otbr_settings.py", line 223, in <module>
    asyncio.run(main())
    ~~~~~~~~~~~^^^^^^^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/usr/local/bin/migrate_otbr_settings.py", line 154, in main
    hwaddr = await get_adapter_hardware_addr(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
    )
    ^
  File "/usr/local/bin/migrate_otbr_settings.py", line 101, in get_adapter_hardware_addr
    rsp = await protocol.send_command(
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
    )
s6-rc: info: service fix-attrs: starting
s6-rc: info: service banner: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
[11:07:55] INFO: Starting mDNS Responder...
Default: mDNSResponder (Engineering Build) (Jan 28 2026 17:15:03) starting
-----------------------------------------------------------
 Add-on: OpenThread Border Router
 OpenThread Border Router add-on
-----------------------------------------------------------
 Add-on version: 2.16.0
 You are running the latest version of this add-on.
 System: Home Assistant OS 17.0  (amd64 / qemux86-64)
 Home Assistant Core: 2026.1.3
 Home Assistant Supervisor: 2026.01.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 otbr-agent: starting
[11:07:55] INFO: Setup OTBR firewall...
[11:07:55] INFO: Migrating OTBR settings if needed...
2026-02-03 11:07:56 homeassistant asyncio[237] DEBUG Using selector: EpollSelector
2026-02-03 11:07:56 homeassistant zigpy.serial[237] DEBUG Opening a serial connection to '/dev/serial/by-id/usb-Nabu_Casa_ZBT-2_DCB4D90E6C58-if00' (baudrate=460800, xonxoff=False, rtscts=False)
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG Configuring serial port '/dev/serial/by-id/usb-Nabu_Casa_ZBT-2_DCB4D90E6C58-if00'
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG Configuring serial port: [0, 0, 3248, 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']]
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG Setting low latency mode: True
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG Setting modem pins: ModemPins[!dtr !rts]
2026-02-03 11:07:56 homeassistant serialx.platforms.serial_posix[237] DEBUG TIOCMBIC: 0x00000006
2026-02-03 11:07:56 homeassistant zigpy.serial[237] DEBUG Connection made: <serialx.platforms.serial_posix.PosixSerialTransport object at 0x7f22bbaa41d0>
2026-02-03 11:07:56 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=0, network_link_id=0, flag=2), command_id=<CommandID.RESET: 1>, data=b'\x02')
2026-02-03 11:07:56 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x80\x01\x02\xea\xf0~'
2026-02-03 11:07:56 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x80\x01\x02\xea\xf0~'
2026-02-03 11:07:56 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-03 11:07:56 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-03 11:07:56 homeassistant serialx.descriptor_transport[237] DEBUG Received b'\xa0T}:~'
2026-02-03 11:07:56 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to decode HDLC chunk bytearray(b'\xa0T}:')
2026-02-03 11:07:58 homeassistant universal_silabs_flasher.spinel[237] DEBUG Device did not respond to reset, continuing
2026-02-03 11:07:58 homeassistant universal_silabs_flasher.spinel[237] 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')
2026-02-03 11:07:58 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:07:58 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:07:58 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-03 11:08:00 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08'), trying again in 0.10s (attempt 1 of 3)
2026-02-03 11:08:00 homeassistant universal_silabs_flasher.spinel[237] 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')
2026-02-03 11:08:00 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:08:00 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:08:00 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-03 11:08:02 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08'), trying again in 0.10s (attempt 2 of 3)
2026-02-03 11:08:02 homeassistant universal_silabs_flasher.spinel[237] 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')
2026-02-03 11:08:02 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:08:02 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-03 11:08:02 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-03 11:08:04 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08'), trying again in 0.10s (attempt 3 of 3)
2026-02-03 11:08:04 homeassistant serialx.descriptor_transport[237] DEBUG Closing at the request of the application
2026-02-03 11:08:04 homeassistant zigpy.serial[237] DEBUG Waiting for serial port to close
2026-02-03 11:08:04 homeassistant serialx.descriptor_transport[237] DEBUG Closing connection: None
2026-02-03 11:08:04 homeassistant serialx.descriptor_transport[237] DEBUG Closing file descriptor 7
2026-02-03 11:08:04 homeassistant serialx.descriptor_transport[237] DEBUG Calling protocol `connection_lost` with exc=None
2026-02-03 11:08:04 homeassistant zigpy.serial[237] DEBUG Connection lost: None
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/dist-packages/universal_silabs_flasher/spinel.py", line 260, in send_frame
    return await asyncio.shield(future)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
asyncio.exceptions.CancelledError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/usr/local/bin/migrate_otbr_settings.py", line 223, in <module>
    asyncio.run(main())
    ~~~~~~~~~~~^^^^^^^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/usr/local/bin/migrate_otbr_settings.py", line 154, in main
    hwaddr = await get_adapter_hardware_addr(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
    )
    ^
  File "/usr/local/bin/migrate_otbr_settings.py", line 101, in get_adapter_hardware_addr
    rsp = await protocol.send_command(
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
    )
    ^
  File "/usr/local/lib/python3.13/dist-packages/universal_silabs_flasher/spinel.py", line 292, in send_command
    return await self.send_frame(frame, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/dist-packages/universal_silabs_flasher/spinel.py", line 259, in send_frame
    async with asyncio_timeout(timeout):
               ~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
    raise TimeoutError from exc_val
TimeoutError
[11:08:04] 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            
[11:08:04] 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
s6-rc: info: service mdns: 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 banner successfully stopped
Default: mDNSResponder (Engineering Build) (Jan 28 2026 17:15:03) stopping
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
[11:08:04] INFO: mDNS ended with exit code 4 (signal 0)...
s6-rc: info: service mdns successfully stopped

I’ve reverted versions and unknowingly, it’s now working.

[12:12:52] INFO: Starting socat TCP client for OTBR daemon...

-----------------------------------------------------------

Add-on: OpenThread Border Router

OpenThread Border Router add-on

-----------------------------------------------------------

Add-on version: 2.15.3

There is an update available for this add-on!

s6-rc: info: service socat-otbr-tcp successfully started

Latest add-on version: 2.16.0

Please consider upgrading as soon as possible.

System: Home Assistant OS 17.0 (amd64 / qemux86-64)

Home Assistant Core: 2026.1.1

Home Assistant Supervisor: 2026.01.1

Just to confirm, did it start working for you after you rolled back OTBR or after you updated it to latest?

Not entirely sure why, but I have this functioning now. I restored from a backup taken the morning before the power outage, and had no success. I then deleted the OTBR add-on, restored it again, and everything is happy. Chalk one up for “ghost in the machine” I guess.