I received my brand new ZBT-2 yesterday. The ZBT-2 is advertised as ‘The easiest way to start with Thread’. Unfortunately, I can not get it to work after a couple of hours of troubleshooting.
I have HAOS running as a VM on my proxmox-server. Things like Z2M are running fine.
Both HAOS and HA are the latest stable.
I flashed the ZBT-2 multiple times with the two latest firmware-releases:
zbt2_openthread_rcp_2.7.2.0
zbt2_openthread_rcp_2.4.4.0
In the OpenThread Border Router app, this is the configuration:
I deleted and reinstalled the otbr-app, otbr-integration and thread integration multiple times. I rebooted HA and the host multiple times during this process.
I tried multiple usb-cables, including the one that came with the ZBT-2. I tried multiple usb-ports, both usb2.0 and usb 3.0. I tried using a usb 2.0 hub instead of plugging the ZBT-2 directly into the server.
But whenever I start the otbr-app it runs for a couple of seconds, then quits with a bunch of error messages like:
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 228, 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 156, in main
hwaddr = await get_adapter_hardware_addr(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
)
^
File "/usr/local/bin/migrate_otbr_settings.py", line 103, 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
[18:09:42] WARNING: otbr-agent exited with code 1 (by signal 0).
For the full log, see https://github.com/user-attachments/files/25914524/core_openthread_border_router_2026-03-11T17-25-33.216Z.log
Is my ZBT-2 defective?
