ZBT-2 refuses to install firmware & fails to connect

It seems the integration setup went by ID:
“/dev/serial/by-id/usb-Nabu_Casa_ZBT-2_DCB4D90C2F2C-if00”

Let me know if I have it wrong… and yes switching to USB 2…

Thanks

Nope, you got it absolutely right

I had the same issue with the failure to install firmware (in my case, Matter). My Odroid N2 just has USB3 sockets, but I found that the problem was the cable. I originally had the cable that came with the ZBT-2 plugged into another extension lead and I could not install the firmware (even after updating the firmware usaing the Device Toolbox). I swapped extension leads, with no change, and it is only when I plugged the ZBT-2 directly into the Odroid with the supplied lead that it would work.

Hopefully this will help someone else!

Hi Jinieren,

Your post looks really promising! i am struggling to get my new ZBT-2 working with HA in ESXI.
I have tried your steps and manually installed the ’ [zbt2_openthread_rcp_2.4.4.0_GitHub-7074a43e4_gsdk_4.4.4.gbl](https://github.com/NabuCasa/silabs-firmware-builder/releases/download/v2025.11.24/zbt2_openthread_rcp_2.4.4.0_GitHub-7074a43e4_gsdk_4.4.4.gbl’ as i want to use thread instead of Zigbee.

as i connected it for the milionth time to my HA instance i rebooted the instance and tried to add the device and choose voor threads. To my surprise HA still wanted to install threads firmware like i did not do that a few minutes back. And still one big fat error message like 30 seconds later.

Update 22:13:

I think i need to add more info.

So my HA runs on Esxi 8.0 update 3 on a Intel nuc. The ZBT-2 is attatched to a usb 2.0 port and esxi configured 2.0 port.

when i attatch the zbt to my laptop and use the firmware website i cant force the 7.4.4.5 firmware on it by manualy uploading a firmware file. i only get the ‘default’ zigbee which will be 7.4.4.6 or the default threads firmware installed on that sucker… ran it in up to date versions of edge and chrome with any form of blocker add in turned off…

Still when i connect to HA and either choose threads or Zigbee it wants to install that firmware and fails…

running HA 2025.12.5 as OVA in Esxi

Actively pulling out my last few hairs…

Nice! Fixed it!

Updated HA core to the 2026.1 and added the ZBT-2 by mobile app.
I would say the firmware did fix my problem but maybe the add process by mobile app goes smoother. did not try it by app earlier this week so i don’t know what fixed it… but it did!

Well, that is pretty sad when a brand new device in 2026 with a USB-C port does not work on a USB3 port! Hopefully Home Assistant folks will figure this out soon.

I have a Home Assistant Blue and it only has USB3 ports.

I plugged the ZBT-2 into my Mac (yes, a USB3 port) and ran the Web Updater pointed to in other threads. This worked fine. It installed the latest Thread firmware no problem.

However, when I then plugged the ZBT-2 back into the HA Blue, HA discovered it and then tried to install firmware again(!) and it failed again. Sigh.

Any ideas on how to get this to work?

I also purchased a ZWA-2 but haven’t tried setting it up yet. Hopefully it does not have the same issue…

I also just tried using the iOS mobile app - same issue.

I have the same problem as well. I wonder why the topic is closed? Someone found the solution?

Here’s my logs:

Failed to flash firmware
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/util.py", line 421, in async_flash_silabs_firmware
    await flasher.enter_bootloader()
  File "/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/flasher.py", line 351, in enter_bootloader
    bootloader_probe = await self.trigger_bootloader_reset(run_firmware=False)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/flasher.py", line 219, in trigger_bootloader_reset
    await self.trigger_bootloader(target)
  File "/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/flasher.py", line 121, in trigger_bootloader
    await uart.set_signals(**pattern.pins)
  File "/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/common.py", line 285, in set_signals
    await loop.run_in_executor(
        None, lambda: self._set_signals(rts=rts, cts=cts, dtr=dtr)
    )
  File "/usr/local/lib/python3.13/concurrent/futures/thread.py", line 59, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/common.py", line 286, in <lambda>
    None, lambda: self._set_signals(rts=rts, cts=cts, dtr=dtr)
                  ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/universal_silabs_flasher/common.py", line 258, in _set_signals
    self._transport.serial.rts = rts
    ^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'serial'
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 203, in _install_firmware_step
    await self.firmware_install_task
  File "/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/firmware_config_flow.py", line 310, in _install_firmware
    self._probed_firmware_info = await async_flash_silabs_firmware(
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<9 lines>...
    )
    ^
  File "/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/util.py", line 430, in async_flash_silabs_firmware
    raise HomeAssistantError("Failed to flash firmware") from err
homeassistant.exceptions.HomeAssistantError: Failed to flash firmware

I am using the minipc Lenovo Thinkcentre, where there’s no USB 2.0, all 5 ports are USB 3.0… HA is running in docker container. I have also added Open Thread Border Router container.

So I managed to update firmware of zbt-2 on my laptop to the latest one, I even tried BETA, and it was successful, however after restart of HA - it discovered ZBT-2 again and offered me to update firmware which triggers error and no other options… this happened multiple times!

This is very strange, something is def wrong with this device, I might have to return it and use ZBT-1 for Thread as well…

Update:

Okay, woke up the next day and figured out that ZBT-2 is not similar to ZBT-1 if used with thread. It acts like a radio for the border router and mustn’t be present in devices list… I was thinking it must be just like ZBT-1 which I use for zigbee… That was confusing me.
So my guess is that it will always continue to discover it on each restart even after I have installed the firmware there. I must just ignore this.

So what I did to install firmware:

  • I made sure I have 2026.1 core version
  • I stopped container with OTBR (because it has access to the device, whuch could interfere with firmware upload.)
  • Also I have added a second string to devices in docker compose for homeassistant:
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
      - /dev/serial/by-id/usb-Nabu_Casa_ZBT-2_DCB4D90E774C-if00:/dev/ttyACM0
  • Then I have started only one HA container.
  • It has discovered the ZBT-2 device, I have installed the firmware for Thread and it told me that I need to get OTBR for it.
  • So I enabled OTBR container as well, manually added it to the list of devices.
  • Then I created matter server container and it was discovered automatically as well.

Later I had trouble sending credentials to the phone for matter devices, but in Settings > Companion App > Troubleshoot I found the way to upload thread credentials to the phone, which allowed me to finally connect first IKEA device - ALPSTUGA, which uses matter over thread.

The only piece left is to figure how to update firmware on devices with my border router, because I don’t have any other. So far it fails, which is known issue.

After 5 hours of pain and extensive Chatgpt usage - the success!

P.S. Thank you for your attention to this matter.

I tried to set up a new ZBT-2 for Thread with HA on a Raspberry Pi 4 and ran into the await async_flash_silabs_firmware error.

I tried at least four times to flash the firmware on various USB ports of the Raspi, disconnecting and reconnecting the ZBT-2 and rebooting the Raspi, without success. I even tried to flash the Zigbee firmware first (which worked) and then the Thread firmware.

The solution was:

  • Remove the ZBT-2 integration
  • Unplug ZBT-2
  • Reboot HA into safe mode
  • Plug in ZBT-2 and wait for it to be discovered
  • Set up the ZBT-2 integration again, flashing the firmware for Thread support
  • Reboot HT into normal mode
  • Now I could add the Matter integration and set up some IKEA devices.

Inspired by this comment: https://github.com/NabuCasa/silabs-firmware-builder/issues/111#issuecomment-2949427840

My version is:

  • Installation method: Home Assistant OS
  • Core: 2026.1.3
  • Supervisor: 2026.01.1
  • Operating System: 17.0
  • Frontend: 20260107.2
1 Like

A note from the support side. We see tickets about ZBT-2 firmware flashing failures, and in every case we’ve worked through, the root cause has been USB communication (usually the bundled cable). Swapping the cable resolves it. Sometimes those with Virtual Machines fix it through resolving an issue with passthrough settings.

The 7.4.4.6 firmware itself isn’t bugged and there is no known issue with it. The flashing process fails at the probe/bootloader step before the firmware version even matters. Downgrading appears to fix it because the process of manually flashing via the web tool uses a different communication path.

If you’re experiencing this and a cable swap doesn’t help, the best place to report it is as a GitHub issue so the developers can view and track it. Especially in regard to providing more information about docker passthrough setups.

https://github.com/home-assistant/core/issues

Otherwise the “known bug” referred to in this post which is pointing to Github is referring back to this forum post in a loop. This isn’t a firmware bug. The firmware itself cannot cause an installation failure, and there’s no confirmation of one in any of the links provided.

3 Likes

Had the same issue. The installer page of openhomefoundation.org kept saying it was 7.4.4.6. I reconnnected the zbt-2 to the HA device and flash was succesfull.

To be complete; what I did was the following:

  1. Tried the HA upgrade (which failed, leading me to this community thread). My zigbee2mqtt addon was causing issues, lost connection with the zigbee network. I restarted the entire HA system (I have a raspberry 5). Zigbee came up.
  2. Later that day; I stopped zigbee2mqtt. Connected the zbt-2 to my computer and with the instructions here I downgraded tot 7.4.4.5. No error in the debug log, but the installer page of openhomefoundation.org kept claiming it was 7.4.4.6.
  3. I reconnected the device to the raspberry / HA instance. The popup for the firmware in HA (still thinking it detected 7.4.4.6, newer version the 7.5.1.0 I believe), started install. Succesfull.
  4. Started zigbee2mqtt.

All was well.

I do not know if the firmware was indeed downgraded to 7.4.4.5, or that another thing I did caused the installer in HA to now succeed (like the reconnect, or perhaps the stopped zigbee2mqtt addon). But I will take the win and post this information for those it might be usefull.

For the latest firmware update (7.5.1.0), follow these steps:

If using Zigbee2MQTT:

  1. Stop the Zigbee2MQTT app
  2. Run the firmware update
  3. Reboot your system (not just a restart of Home Assistant)
  4. Start Zigbee2MQTT again

Z2M does not release the serial port automatically. If it’s running during the update, the flash will likely fail.

If using ZHA:

  1. ZHA should handle this automatically, but if the update fails, or if you don’t want to test that:
  2. Disable the ZHA integration (Settings > Devices & Services > ZHA > three-dot menu > Disable)
  3. Run the firmware update
  4. Reboot your system (not just a restart of Home Assistant)
  5. Re-enable ZHA

Note: Disabling ZHA hides it from the default integration list. It is not deleted. To find it again: Settings > Devices & Services > filter icon > "Show disabled integrations.

Are you certain this is the solution? I lost my entire network for hours when my flash failed and ZHA wouldn’t come back up. I want to upgrade, but not put my mesh at risk. :slight_smile: