From 383f6142f0e66940f12e99b7fd02d80ce174fca5 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Fri, 22 May 2026 16:58:01 +0200 Subject: [PATCH] Fix ZBT-2 hardware page crash when entry data is missing VID (#171828) --- .../homeassistant_connect_zbt2/hardware.py | 4 +- .../test_hardware.py | 64 +++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/homeassistant_connect_zbt2/hardware.py b/homeassistant/components/homeassistant_connect_zbt2/hardware.py index 16317826c4d2..29720c53c494 100644 --- a/homeassistant/components/homeassistant_connect_zbt2/hardware.py +++ b/homeassistant/components/homeassistant_connect_zbt2/hardware.py @@ -19,7 +19,9 @@ EXPECTED_ENTRY_VERSION = ( @callback def async_info(hass: HomeAssistant) -> list[HardwareInfo]: """Return board info.""" - entries = hass.config_entries.async_entries(DOMAIN) + entries = hass.config_entries.async_entries( + DOMAIN, include_ignore=False, include_disabled=False + ) return [ HardwareInfo( board=None, diff --git a/tests/components/homeassistant_connect_zbt2/test_hardware.py b/tests/components/homeassistant_connect_zbt2/test_hardware.py index a0bd22e1c932..6192f2d7bb43 100644 --- a/tests/components/homeassistant_connect_zbt2/test_hardware.py +++ b/tests/components/homeassistant_connect_zbt2/test_hardware.py @@ -2,6 +2,7 @@ from homeassistant.components.homeassistant_connect_zbt2.const import DOMAIN from homeassistant.components.usb import DOMAIN as USB_DOMAIN +from homeassistant.config_entries import ConfigEntryState from homeassistant.const import EVENT_HOMEASSISTANT_STARTED from homeassistant.core import HomeAssistant from homeassistant.setup import async_setup_component @@ -65,3 +66,66 @@ async def test_hardware_info( } ] } + + +async def test_hardware_info_ignored_entry( + hass: HomeAssistant, hass_ws_client: WebSocketGenerator, addon_store_info +) -> None: + """Test ignored discovery entries don't crash hardware info. + + Regression test for https://github.com/home-assistant/core/issues/170270 + """ + assert await async_setup_component(hass, USB_DOMAIN, {}) + hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED) + + # Setup the normal entry so the hardware platform is loaded + normal_entry = MockConfigEntry( + data=CONFIG_ENTRY_DATA, + domain=DOMAIN, + options={}, + title="Home Assistant Connect ZBT-2", + unique_id="normal_1", + version=1, + minor_version=1, + ) + normal_entry.add_to_hass(hass) + assert await hass.config_entries.async_setup(normal_entry.entry_id) + + # Setup an ignored config entry without USB data + ignored_entry = MockConfigEntry( + data={}, + domain=DOMAIN, + options={}, + title="Home Assistant Connect ZBT-2", + unique_id="ignored_1", + version=1, + minor_version=2, + source="ignore", + ) + ignored_entry.add_to_hass(hass) + assert ignored_entry.state is ConfigEntryState.NOT_LOADED + + client = await hass_ws_client(hass) + + await client.send_json({"id": 1, "type": "hardware/info"}) + msg = await client.receive_json() + + assert msg["id"] == 1 + assert msg["success"] + assert msg["result"] == { + "hardware": [ + { + "board": None, + "config_entries": [normal_entry.entry_id], + "dongle": { + "vid": "303A", + "pid": "4001", + "serial_number": "80B54EEFAE18", + "manufacturer": "Nabu Casa", + "description": "ZBT-2", + }, + "name": "Home Assistant Connect ZBT-2", + "url": "https://support.nabucasa.com/hc/en-us/categories/24734620813469-Home-Assistant-Connect-ZBT-1", + } + ] + }