ZBT-2 Error - Zigbee firmware failed to install, check Home Assistant logs for more information

Home Assistant Connect ZBT-2

“Zigbee firmware failed to install, check Home Assistant logs for more information.”

Hi, No search results yet for this error so starting a thread.

When Migrating from ZBT-1 to ZBT-2:

—-

emphasized textLogger: universal_silabs_flasher.flasher
Source: components/homeassistant_hardware/util.py:393
First occurred: 14:02:28 (1 occurrence)
Last logged: 14:02:28

Bootloader did not launch a valid application

—-

Logger: homeassistant.components.homeassistant_hardware.firmware_config_flow
Source: components/homeassistant_hardware/firmware_config_flow.py:201
integration: Home Assistant Hardware (documentation, issues)
First occurred: 14:02:30 (1 occurrence)
Last logged: 14:02:30

Failed to flash firmware
Traceback (most recent call last):
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/gecko_bootloader.py”, line 141, in probe
return await self.ebl_info()
^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/gecko_bootloader.py”, line 151, in ebl_info
await self._state_machine.wait_for_state(State.IN_MENU)
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/common.py”, line 125, in wait_for_state
return await future
^^^^^^^^^^^^
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/util.py”, line 396, in async_flash_silabs_firmware
await flasher.flash_firmware(
fw_image, progress_callback=progress_callback
)
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/flasher.py”, line 378, in flash_firmware
await gecko.probe()
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/gecko_bootloader.py”, line 140, in probe
async with asyncio_timeout(PROBE_TIMEOUT):
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.13/asyncio/timeouts.py”, line 116, in aexit
raise TimeoutError from exc_val
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/firmware_config_flow.py”, line 201, in _install_firmware_step
await self.firmware_install_task
File “/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/firmware_config_flow.py”, line 292, in _install_firmware
self._probed_firmware_info = await async_flash_silabs_firmware(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
…<8 lines>…
)
^
File “/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/util.py”, line 400, in async_flash_silabs_firmware
raise HomeAssistantError(“Failed to flash firmware”) from err
homeassistant.exceptions.HomeAssistantError: Failed to flash firmware

Raspberry Pi 3b+ (yes, old, i know).

  • Installation methodHome Assistant OS
  • Core2025.11.2
  • Supervisor2025.11.4
  • Operating System16.3
  • Frontend20251105.0

—-

Otherwise, The box, packaging and design of the ZBT-2 device is very nice! Well done Nabucasa team.

1 Like

I have an identical issue except I’m trying to flash the OpenThread firmware.

I have the exact same error. Is there any way to flash the firmware in a manual way?

I installed the latest zigbee firmware using the web flasher, then the installation went through. Zigbee network is stabilizing as we speak.

5 Likes

Thanks. This did the trick

yes, this worked - thanks! Migration from the old adapter is completed

Same problem failed to install :frowning:

I’m having the same issue, tried a few times and trying to Flash from HA fails, the web flasher seems to be flashing now… :crossed_fingers:

  1. Updated firmware manually and it still failed.
  2. Did a hard reboot and still failed.
  3. Decided to reboot again… It worked!
  4. If you have a ZBT-1 (original dongle) leave it plugged in so the software can reset it.
    All working now. with strong signals :smiley:

Weird - Same the 2nd reboot did the trick for me!

Ditto… ZBT-2 auto-discovered, then firmware fails then no longer auto-discovered. Plugged the ZBT-2 into the PC and updated the firmware via the link above, that worked. Plugged back into Home Assistant Green… still didn’t auto-discover… if that happens to you then go to: Devices & Services > Zigbee Home Automation > Cog Icon > Migrate Adaptor. Follow the prompts and you should see the ZBT-2. Migration then successful.

Shame… The ZBT-2 arrived this morning, really nice packaging etc… but, sadly, fell at the first hurdle!

1 Like

Over here the firmware cannot be installed neither via HA OS nor via the web flasher. After a HA reboot it is auto-discovered again.

HA protocols

Bootloader did not launch a valid application

Logger: universal_silabs_flasher.flasher
Quelle: components/homeassistant_hardware/util.py:393
Erstmals aufgetreten: 15:38:45 (1 Vorkommnis)
Zuletzt protokolliert: 15:38:45

Bootloader did not launch a valid application

Failed to flash firmware

Logger: homeassistant.components.homeassistant_hardware.firmware_config_flow
Quelle: components/homeassistant_hardware/firmware_config_flow.py:201
Integration: Home Assistant Hardware (Dokumentation, Probleme)
Erstmals aufgetreten: 15:38:47 (1 Vorkommnis)
Zuletzt protokolliert: 15:38:47

Failed to flash firmware
Traceback (most recent call last):
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/gecko_bootloader.py”, line 141, in probe
return await self.ebl_info()
^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/gecko_bootloader.py”, line 151, in ebl_info
await self._state_machine.wait_for_state(State.IN_MENU)
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/common.py”, line 125, in wait_for_state
return await future
^^^^^^^^^^^^
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/util.py”, line 396, in async_flash_silabs_firmware
await flasher.flash_firmware(
fw_image, progress_callback=progress_callback
)
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/flasher.py”, line 378, in flash_firmware
await gecko.probe()
File “/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/gecko_bootloader.py”, line 140, in probe
async with asyncio_timeout(PROBE_TIMEOUT):
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.13/asyncio/timeouts.py”, line 116, in aexit
raise TimeoutError from exc_val
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/firmware_config_flow.py”, line 201, in _install_firmware_step
await self.firmware_install_task
File “/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/firmware_config_flow.py”, line 292, in _install_firmware
self._probed_firmware_info = await async_flash_silabs_firmware(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
…<8 lines>…
)
^
File “/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/util.py”, line 400, in async_flash_silabs_firmware
raise HomeAssistantError(“Failed to flash firmware”) from err
homeassistant.exceptions.HomeAssistantError: Failed to flash firmware

web flasher

silabs_flasher.log

2025-11-21 15:44:43 emscripten zigpy.appdb[42] DEBUG SQLite version for <webserial_transport.MockSqlite3 object at 0x11892e0>: 3.31.1
2025-11-21 15:44:43 emscripten universal_silabs_flasher.flasher[42] INFO Triggering rts_dtr bootloader
2025-11-21 15:44:43 emscripten webserial_transport[42] DEBUG Opening a serial connection at 115200 with rtscts=False
2025-11-21 15:44:43 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1ccccb8>
2025-11-21 15:44:43 emscripten universal_silabs_flasher.common[42] DEBUG Setting UART signals: rts=1, cts=-, dtr=0
2025-11-21 15:44:43 emscripten universal_silabs_flasher.common[42] DEBUG Setting UART signals: rts=0, cts=-, dtr=1
2025-11-21 15:44:44 emscripten universal_silabs_flasher.common[42] DEBUG Setting UART signals: rts=0, cts=-, dtr=0
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:44:44 emscripten universal_silabs_flasher.flasher[42] INFO Triggering baudrate bootloader
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Opening a serial connection at 150 with rtscts=False
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1ce3430>
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Opening a serial connection at 300 with rtscts=False
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1ce3388>
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Opening a serial connection at 1200 with rtscts=False
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1d53908>
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:44:44 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:44:44 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:44:48 emscripten webserial_transport[42] DEBUG Opening a serial connection at 115200 with rtscts=False
2025-11-21 15:44:48 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1be9d78>
2025-11-21 15:44:48 emscripten universal_silabs_flasher.gecko_bootloader[42] DEBUG Sending data b’\n’
2025-11-21 15:44:48 emscripten universal_silabs_flasher.gecko_bootloader[42] DEBUG Sending data GeckoBootloaderOption.EBL_INFO
2025-11-21 15:44:50 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:44:50 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:44:50 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:44:50 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:44:50 emscripten universal_silabs_flasher.flasher[42] INFO Probing ApplicationType.GECKO_BOOTLOADER at 115200 baud
2025-11-21 15:44:50 emscripten webserial_transport[42] DEBUG Opening a serial connection at 115200 with rtscts=False
2025-11-21 15:44:50 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1bb3440>
2025-11-21 15:44:50 emscripten universal_silabs_flasher.gecko_bootloader[42] DEBUG Sending data b’\n’
2025-11-21 15:44:50 emscripten universal_silabs_flasher.gecko_bootloader[42] DEBUG Sending data GeckoBootloaderOption.EBL_INFO
2025-11-21 15:44:52 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:44:52 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:44:52 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:44:52 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:44:52 emscripten universal_silabs_flasher.flasher[42] DEBUG Probe timed out
2025-11-21 15:44:52 emscripten universal_silabs_flasher.flasher[42] INFO Probing ApplicationType.EZSP at 460800 baud
2025-11-21 15:44:52 emscripten webserial_transport[42] DEBUG Opening a serial connection at 460800 with rtscts=False
2025-11-21 15:44:52 emscripten zigpy.serial[42] DEBUG Connection made: <bellows.ash.AshProtocol object at 0x1d0b058>
2025-11-21 15:44:52 emscripten bellows.ezsp[42] DEBUG Resetting EZSP
2025-11-21 15:44:52 emscripten bellows.uart[42] DEBUG Resetting ASH
2025-11-21 15:44:52 emscripten bellows.ash[42] DEBUG Sending frame 32CANCEL RstFrame() FLAG
2025-11-21 15:44:52 emscripten bellows.ash[42] DEBUG Sending data 1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1ac038bc7e
2025-11-21 15:44:54 emscripten bellows.ezsp[42] DEBUG EZSP startup/reset failed, retrying (1/3): TimeoutError()
2025-11-21 15:44:54 emscripten bellows.ezsp[42] DEBUG Resetting EZSP
2025-11-21 15:44:54 emscripten bellows.uart[42] DEBUG Resetting ASH
2025-11-21 15:44:54 emscripten bellows.ash[42] DEBUG Sending frame 32
CANCEL RstFrame() FLAG
2025-11-21 15:44:54 emscripten bellows.ash[42] DEBUG Sending data 1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1ac038bc7e
2025-11-21 15:44:57 emscripten bellows.ezsp[42] DEBUG EZSP startup/reset failed, retrying (2/3): TimeoutError()
2025-11-21 15:44:57 emscripten bellows.ezsp[42] DEBUG Resetting EZSP
2025-11-21 15:44:57 emscripten bellows.uart[42] DEBUG Resetting ASH
2025-11-21 15:44:57 emscripten bellows.ash[42] DEBUG Sending frame 32CANCEL RstFrame() FLAG
2025-11-21 15:44:57 emscripten bellows.ash[42] DEBUG Sending data 1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1ac038bc7e
2025-11-21 15:44:59 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:44:59 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:44:59 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:44:59 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:44:59 emscripten bellows.uart[42] DEBUG Connection lost: None
2025-11-21 15:44:59 emscripten universal_silabs_flasher.flasher[42] DEBUG Probe timed out
2025-11-21 15:44:59 emscripten universal_silabs_flasher.flasher[42] INFO Probing ApplicationType.SPINEL at 460800 baud
2025-11-21 15:44:59 emscripten webserial_transport[42] DEBUG Opening a serial connection at 460800 with rtscts=False
2025-11-21 15:44:59 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1de4140>
2025-11-21 15:44:59 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=0, network_link_id=0, flag=2), command_id=<CommandID.RESET: 1>, data=b’\x02’)
2025-11-21 15:44:59 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending data b’~\x80\x01\x02\xea\xf0~’
2025-11-21 15:45:01 emscripten universal_silabs_flasher.spinel[42] DEBUG Device did not respond to reset, continuing
2025-11-21 15:45:01 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’)
2025-11-21 15:45:01 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending data b’~\x83\x02\x02\xe65~’
2025-11-21 15:45:03 emscripten universal_silabs_flasher.spinel[42] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’), trying again in 0.10s (attempt 1 of 3)
2025-11-21 15:45:03 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’)
2025-11-21 15:45:03 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending data b’~\x83\x02\x02\xe65~’
2025-11-21 15:45:05 emscripten universal_silabs_flasher.spinel[42] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’), trying again in 0.10s (attempt 2 of 3)
2025-11-21 15:45:05 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’)
2025-11-21 15:45:05 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending data b’~\x83\x02\x02\xe65~’
2025-11-21 15:45:07 emscripten universal_silabs_flasher.spinel[42] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’), trying again in 0.10s (attempt 3 of 3)
2025-11-21 15:45:07 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:45:07 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:45:08 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:45:08 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:45:08 emscripten universal_silabs_flasher.flasher[42] DEBUG Probe timed out
2025-11-21 15:45:28 emscripten zigpy.appdb[42] DEBUG SQLite version for <webserial_transport.MockSqlite3 object at 0x1203fd0>: 3.31.1
2025-11-21 15:45:28 emscripten universal_silabs_flasher.flasher[42] INFO Triggering rts_dtr bootloader
2025-11-21 15:45:28 emscripten webserial_transport[42] DEBUG Opening a serial connection at 115200 with rtscts=False
2025-11-21 15:45:28 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1d54310>
2025-11-21 15:45:28 emscripten universal_silabs_flasher.common[42] DEBUG Setting UART signals: rts=1, cts=-, dtr=0
2025-11-21 15:45:28 emscripten universal_silabs_flasher.common[42] DEBUG Setting UART signals: rts=0, cts=-, dtr=1
2025-11-21 15:45:29 emscripten universal_silabs_flasher.common[42] DEBUG Setting UART signals: rts=0, cts=-, dtr=0
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:45:29 emscripten universal_silabs_flasher.flasher[42] INFO Triggering baudrate bootloader
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Opening a serial connection at 150 with rtscts=False
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1bc85d8>
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Opening a serial connection at 300 with rtscts=False
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1d7c8c0>
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Opening a serial connection at 1200 with rtscts=False
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1b9bd60>
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:45:29 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:45:29 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:45:33 emscripten webserial_transport[42] DEBUG Opening a serial connection at 115200 with rtscts=False
2025-11-21 15:45:33 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1dddd48>
2025-11-21 15:45:33 emscripten universal_silabs_flasher.gecko_bootloader[42] DEBUG Sending data b’\n’
2025-11-21 15:45:33 emscripten universal_silabs_flasher.gecko_bootloader[42] DEBUG Sending data GeckoBootloaderOption.EBL_INFO
2025-11-21 15:45:35 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:45:35 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:45:35 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:45:35 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:45:35 emscripten universal_silabs_flasher.flasher[42] INFO Probing ApplicationType.GECKO_BOOTLOADER at 115200 baud
2025-11-21 15:45:35 emscripten webserial_transport[42] DEBUG Opening a serial connection at 115200 with rtscts=False
2025-11-21 15:45:35 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1cea6b8>
2025-11-21 15:45:35 emscripten universal_silabs_flasher.gecko_bootloader[42] DEBUG Sending data b’\n’
2025-11-21 15:45:35 emscripten universal_silabs_flasher.gecko_bootloader[42] DEBUG Sending data GeckoBootloaderOption.EBL_INFO
2025-11-21 15:45:37 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:45:37 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:45:37 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:45:37 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:45:37 emscripten universal_silabs_flasher.flasher[42] DEBUG Probe timed out
2025-11-21 15:45:37 emscripten universal_silabs_flasher.flasher[42] INFO Probing ApplicationType.EZSP at 460800 baud
2025-11-21 15:45:37 emscripten webserial_transport[42] DEBUG Opening a serial connection at 460800 with rtscts=False
2025-11-21 15:45:37 emscripten zigpy.serial[42] DEBUG Connection made: <bellows.ash.AshProtocol object at 0x1d86928>
2025-11-21 15:45:37 emscripten bellows.ezsp[42] DEBUG Resetting EZSP
2025-11-21 15:45:37 emscripten bellows.uart[42] DEBUG Resetting ASH
2025-11-21 15:45:37 emscripten bellows.ash[42] DEBUG Sending frame 32
CANCEL RstFrame() FLAG
2025-11-21 15:45:37 emscripten bellows.ash[42] DEBUG Sending data 1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1ac038bc7e
2025-11-21 15:45:39 emscripten bellows.ezsp[42] DEBUG EZSP startup/reset failed, retrying (1/3): TimeoutError()
2025-11-21 15:45:39 emscripten bellows.ezsp[42] DEBUG Resetting EZSP
2025-11-21 15:45:39 emscripten bellows.uart[42] DEBUG Resetting ASH
2025-11-21 15:45:39 emscripten bellows.ash[42] DEBUG Sending frame 32CANCEL RstFrame() FLAG
2025-11-21 15:45:39 emscripten bellows.ash[42] DEBUG Sending data 1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1ac038bc7e
2025-11-21 15:45:42 emscripten bellows.ezsp[42] DEBUG EZSP startup/reset failed, retrying (2/3): TimeoutError()
2025-11-21 15:45:42 emscripten bellows.ezsp[42] DEBUG Resetting EZSP
2025-11-21 15:45:42 emscripten bellows.uart[42] DEBUG Resetting ASH
2025-11-21 15:45:42 emscripten bellows.ash[42] DEBUG Sending frame 32
CANCEL RstFrame() FLAG
2025-11-21 15:45:42 emscripten bellows.ash[42] DEBUG Sending data 1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1ac038bc7e
2025-11-21 15:45:44 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:45:44 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:45:44 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:45:44 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:45:44 emscripten bellows.uart[42] DEBUG Connection lost: None
2025-11-21 15:45:44 emscripten universal_silabs_flasher.flasher[42] DEBUG Probe timed out
2025-11-21 15:45:44 emscripten universal_silabs_flasher.flasher[42] INFO Probing ApplicationType.SPINEL at 460800 baud
2025-11-21 15:45:44 emscripten webserial_transport[42] DEBUG Opening a serial connection at 460800 with rtscts=False
2025-11-21 15:45:44 emscripten zigpy.serial[42] DEBUG Connection made: <webserial_transport.WebSerialTransport object at 0x1de6e30>
2025-11-21 15:45:44 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=0, network_link_id=0, flag=2), command_id=<CommandID.RESET: 1>, data=b’\x02’)
2025-11-21 15:45:44 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending data b’~\x80\x01\x02\xea\xf0~’
2025-11-21 15:45:46 emscripten universal_silabs_flasher.spinel[42] DEBUG Device did not respond to reset, continuing
2025-11-21 15:45:46 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’)
2025-11-21 15:45:46 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending data b’~\x83\x02\x02\xe65~’
2025-11-21 15:45:48 emscripten universal_silabs_flasher.spinel[42] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’), trying again in 0.10s (attempt 1 of 3)
2025-11-21 15:45:48 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’)
2025-11-21 15:45:48 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending data b’~\x83\x02\x02\xe65~’
2025-11-21 15:45:50 emscripten universal_silabs_flasher.spinel[42] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’), trying again in 0.10s (attempt 2 of 3)
2025-11-21 15:45:50 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’)
2025-11-21 15:45:50 emscripten universal_silabs_flasher.spinel[42] DEBUG Sending data b’~\x83\x02\x02\xe65~’
2025-11-21 15:45:52 emscripten universal_silabs_flasher.spinel[42] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b’\x02’), trying again in 0.10s (attempt 3 of 3)
2025-11-21 15:45:52 emscripten zigpy.serial[42] DEBUG Waiting for serial port to close
2025-11-21 15:45:52 emscripten webserial_transport[42] DEBUG Closing serial port
2025-11-21 15:45:52 emscripten webserial_transport[42] DEBUG Closed serial port
2025-11-21 15:45:52 emscripten zigpy.serial[42] DEBUG Connection lost: None
2025-11-21 15:45:52 emscripten universal_silabs_flasher.flasher[42] DEBUG Probe timed out

Before picking it up today at the post office I was wondering if it was a good idea to get it directly after launch. Bummer.

Helo Guys,

Unboxed HomeAssistant Green together with ZBT-2.
On a fresh install I get the error raised in this thread.

How can I resolve this on a HA Green?

Best regards
Arjen

My problem is solved after update to HA Core 2025-11-3

Update on ZBT-2 Integration Issue - Partial Success, Missing Entities

Following up on the firmware installation problem. I’ve made some progress but encountered a new issue that suggests a deeper integration problem.

What I’ve Tried

1. Initial Problem: Firmware Installation Timeout

When trying to install Zigbee firmware through Home Assistant’s built-in flow, I consistently got:

Zigbee firmware failed to install, check Home Assistant logs for more information.

Log Analysis (home-assistant.log):

2025-11-21 16:36:39.430 WARNING (MainThread) [universal_silabs_flasher.flasher]
Bootloader did not launch a valid application

2025-11-21 16:36:41.435 ERROR (MainThread) [homeassistant.components.homeassistant_hardware.firmware_config_flow]
Failed to flash firmware

Traceback:
  File "/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/gecko_bootloader.py", line 141, in probe
    return await self.ebl_info()
  File "/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/gecko_bootloader.py", line 151, in ebl_info
    await self._state_machine.wait_for_state(State.IN_MENU)
  File "/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/common.py", line 125, in wait_for_state
    return await future
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:
TimeoutError

The bootloader probe timed out trying to communicate with the device.

2. Workaround: Web Flasher (Partial Success)

I used the official toolbox: Install Firmware – Device Toolbox

  • Connected ZBT-2 to my laptop
  • Used Chrome (Web Serial API)
  • Selected “Zigbee (EZSP)”
  • Installation completed successfully
  • Installed version: Zigbee (EZSP) 7.4.4.5 build 0 (20251029174353)

After reconnecting to Home Assistant:

  • Zigbee migration from ZBT-1 succeeded
  • ZBT-2 is functioning as a Zigbee coordinator
  • All my Zigbee devices work properly

However…

The Problem: Missing Entities

Here’s where things get weird. I also have a ZWA-2 which works perfectly, and when I compare the entities:

ZWA-2 (Working Perfectly):

  • sensor.home_assistant_connect_zwa_2_status - Status sensor
  • light.home_assistant_connect_zwa_2_led - LED control (ON/OFF for antenna LED)
  • update.home_assistant_connect_zwa_2_firmware - Firmware updates

ZBT-2 (Missing Entities):

  • update.home_assistant_connect_zbt_2_1cdbd45f4654_firmware - Firmware updates only
  • MISSING: LED control entity
  • MISSING: Status sensor

What This Means

The ZBT-2’s LED (the light on top of the antenna) was visible and working when first connected. After the firmware update, the LED turned off and there’s no way to control it from Home Assistant. The device works for Zigbee coordination, but the integration with Home Assistant hardware features is incomplete.

Current firmware info from entity attributes:

installed_version: "7.4.4.5"
latest_version: "7.4.4.3"
title: "EmberZNet Zigbee"

Interesting note: The toolbox installed 7.4.4.5, but HA thinks 7.4.4.3 is the latest. This might be causing integration issues.

Attempted Solutions

  • Restarted Home Assistant multiple times - no change
  • Tried updating firmware again through HA - same timeout error
  • ZBT-2 is recognized as hardware, but only partial integration

Questions

  1. Why doesn’t ZBT-2 get the same LED control entities that ZWA-2 has?
  2. Is the firmware version mismatch (7.4.4.5 vs expected 7.4.4.3) causing the integration to fail?
  3. Should I try downgrading to 7.4.4.3 somehow?
  4. Is there a way to force re-detection of the hardware capabilities?

Hardware Comparison

ZWA-2: Flawless experience. Plug and play, all features working, beautiful design.
ZBT-2: Great design (kudos on that!), Zigbee works perfectly, but software integration feels incomplete.

Running out of ideas here. Any suggestions would be greatly appreciated!

Home Assistant Version: 2025.11.2
Installation Type: Home Assistant OS
ZBT-2 Firmware: 7.4.4.5 (installed via web toolbox)

1 Like

I am seeing the same issue with missing entities, using Firmware 7.4.4.3.

I had the same problems upgrading the firmware as others report in this thread, but did eventually get it to update via Home Assistant … something to do with firmware not updating while the ZHA integration has control of the ZBT-2, but disabling ZHA, rebooting, and a bit of mystical magic sorted it and installed 7.4.4.3.

The LED came on briefly when first connected, but is now off and the missing LED entity means there’s no way to turn it back on.

I have the ZBT-2 and ZWA-2 sitting next to each other, so it looks very odd. Maybe I’ll have to turn the ZWA-2’s LED off?

Solved! :grin:

Updated to newly released Core 2025.11.3 version today and ZBT-2 set up wizard (with flashing) now all works inside Home Assistant.

Thanks Home Assistant team!

(PS: actual correct functioning of zigbee device tbc)

2 Likes

Confirmed - firmware installation now works in Core 2025.11.3! :tada:

Thanks to the HA team for the quick fix. This is exactly why we use Home Assistant instead of other solutions. :slight_smile:

However, the LED control issue remains unresolved:

As I mentioned in my original post, the ZBT-2 is still missing entities that the ZWA-2 has:

ZWA-2 (complete integration):

  • sensor.home_assistant_connect_zwa_2_status - Status sensor
  • light.home_assistant_connect_zwa_2_led - LED control
  • update.home_assistant_connect_zwa_2_firmware - Firmware updates

ZBT-2 (partial integration):

  • update.home_assistant_connect_zbt_2_firmware - Firmware updates only
  • MISSING: LED control entity
  • MISSING: Status sensor

The ZBT-2’s LED was working when first connected, but after the firmware update it turned off with no way to control it from HA.

Question: Is LED control support for ZBT-2 planned for an upcoming release? Both devices sit next to each other here, and having the ZWA-2 LED working while the ZBT-2 stays dark is… noticeable. :sweat_smile:

Would love to see feature parity between these two promising devices!

1 Like

Web flasher also does not work for me. Any ideas? Seems like this thing is bricked.

Mine errored when trying to update via HomeAssistant dashboard and it wouldn’t come back even after a VM reboot (Proxmox host)

Failed to perform the action update/install. The config entry ‘ZBT-2 - Nabu Casa ZBT-2, s/n: 345876443857643 - Nabu Casa’ (zha) with entry_id ‘94385739847593487984375943875498375’ cannot be set up because it is in state ConfigEntryState.SETUP_RETRY, but needs to be in the ConfigEntryState.NOT_LOADED state

Used the WebFlasher tool as posted above and it updated to 7.4.4.5 no problem.
Plugged it back into HA, rebooted and zigbee came back to life, but it seems confused as to what version is installed.