ZBT-2 Matter/Thread installation errors out with `FileNotFoundError`

Installation method Home Assistant OS
Core 2026.5.0
Supervisor 2026.04.2
Operating System 17.3
Frontend 20260429.3

On a bare-metal generic x86_64 installation. When plugging in ZBT-2, the device discovery runs fine, but when I try to install the Matter/Thread firmware I get:

Logger: homeassistant.components.homeassistant_hardware.firmware_config_flow
Source: components/homeassistant_hardware/firmware_config_flow.py:202
Integration: Home Assistant Hardware (documentation, issues)
First occurred: 12:36:56 AM (1 occurrence)
Last logged: 12:36:56 AM

Failed to flash firmware
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/util.py", line 442, in async_flash_silabs_firmware
    await flasher.enter_bootloader()
  File "/usr/local/lib/python3.14/site-packages/universal_silabs_flasher/flasher.py", line 371, in enter_bootloader
    bootloader_probe = await self.trigger_bootloader_reset(run_firmware=False)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.14/site-packages/universal_silabs_flasher/flasher.py", line 629, in trigger_bootloader_reset
    await self._trigger_modem_pin_reset(rts_dtr_config)
  File "/usr/local/lib/python3.14/site-packages/universal_silabs_flasher/flasher.py", line 220, in _trigger_modem_pin_reset
    async with connect_protocol(
               ~~~~~~~~~~~~~~~~^
        self._device, 115200, zigpy.serial.SerialProtocol
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ) as uart:
    ^
  File "/usr/local/lib/python3.14/contextlib.py", line 214, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.14/site-packages/universal_silabs_flasher/common.py", line 136, in connect_protocol
    _, protocol = await zigpy.serial.create_serial_connection(
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<4 lines>...
    )
    ^
  File "/usr/local/lib/python3.14/site-packages/zigpy/serial.py", line 100, in create_serial_connection
    transport, protocol = await serialx_create_serial_connection(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<7 lines>...
    )
    ^
  File "/usr/local/lib/python3.14/site-packages/serialx/async_serial.py", line 277, in create_serial_connection
    await transport.connect(
    ...<8 lines>...
    )
  File "/usr/local/lib/python3.14/site-packages/serialx/common.py", line 973, in connect
    await self._connect(path=path, **kwargs)
  File "/usr/local/lib/python3.14/site-packages/serialx/platforms/serial_posix.py", line 484, in _connect
    await super()._open(normalized_path)
  File "/usr/local/lib/python3.14/site-packages/serialx/descriptor_transport.py", line 83, in _open
    self._fileno = await self._open_fut
                   ^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.14/concurrent/futures/thread.py", line 86, in run
    result = ctx.run(self.task)
  File "/usr/local/lib/python3.14/concurrent/futures/thread.py", line 73, in run
    return fn(*args, **kwargs)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Nabu_Casa_ZBT-2_E072A1F7A55C-if00'

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 202, in _install_firmware_step
    await self.firmware_install_task
  File "/usr/src/homeassistant/homeassistant/components/homeassistant_hardware/firmware_config_flow.py", line 308, 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 451, in async_flash_silabs_firmware
    raise HomeAssistantError("Failed to flash firmware") from err
homeassistant.exceptions.HomeAssistantError: Failed to flash firmware

In addition, even if I use openhomefoundation tool to flash the Matter/Threads firmware before hand, it does not bypass this flow. Which seems weird.

Any way out of this?

I don't know, but this may be a bug. The developers have been making changes transistioning from pyserial to serialx, so maybe a bug??
Goto UI->Settings->System->Hardware and click on "all hardware" and scroll down to see if there is a ttyACMx showing the ZBT-2 and see if it matches the ID in the FileNotFoundError

I see

DEVLINKS: >-
  /dev/serial/by-id/usb-Nabu_Casa_ZBT-2_E072A1F7A55C-if00
  /dev/serial/by-path/pci-0000:00:14.0-usb-0:1:1.0
  /dev/serial/by-path/pci-0000:00:14.0-usbv2-0:1:1.0

which seems to match

If I select install Zigbee at the device discovery UI flow, instead of error, I get stuck at

forever

this is kind of interesting

universal-silabs-flasher --device /dev/serial/by-id/usb-Nabu_Casa_ZBT-2_E072A1F7A55C-if00 probe
2026-05-08 14:15:02.844 a0d7b954-ssh universal_silabs_flasher.flasher INFO Probing ApplicationType.GECKO_BOOTLOADER at 115200 baud
2026-05-08 14:15:04.245 a0d7b954-ssh serialx.descriptor_transport INFO <serialx.platforms.serial_linux.LinuxSerialTransport object at 0x7f9b37803e10> was closed by peer
Error: Connection has been lost

I'm wondering if this is a USB powering problem (lack thereof). Maybe try a powered USB Hub to see if that makes a difference.

hm, I will find a way to test that.

At a glance, unlikely the problem because Expansion Card Functionality on Framework Laptop 13 (AMD Ryzen™ 7040 Series) says it can support at least 1.5A each, and ZBT-2 doc says it only draws 0.5A

A different dongle fixed it, looks like Framework's own USB-A extention card (at least the gen I have) has some incompatibility.