diff --git a/homeassistant/components/hue/v2/device_trigger.py b/homeassistant/components/hue/v2/device_trigger.py index 0c58286e13e..9ac568fb106 100644 --- a/homeassistant/components/hue/v2/device_trigger.py +++ b/homeassistant/components/hue/v2/device_trigger.py @@ -87,6 +87,8 @@ def async_get_triggers( # Get Hue device id from device identifier hue_dev_id = get_hue_device_id(device_entry) + if hue_dev_id is None or hue_dev_id not in api.devices: + return [] # extract triggers from all button resources of this Hue device triggers: list[dict[str, Any]] = [] model_id = api.devices[hue_dev_id].product_data.product_name diff --git a/tests/components/hue/test_device_trigger_v2.py b/tests/components/hue/test_device_trigger_v2.py index dd5d855c1bc..e2565701d22 100644 --- a/tests/components/hue/test_device_trigger_v2.py +++ b/tests/components/hue/test_device_trigger_v2.py @@ -116,3 +116,30 @@ async def test_get_triggers( ] assert triggers == unordered(expected_triggers) + + +async def test_get_triggers_for_removed_device( + hass: HomeAssistant, + mock_bridge_v2: Mock, + v2_resources_test_data: JsonArrayType, + device_registry: dr.DeviceRegistry, +) -> None: + """Test triggers for a device removed from the bridge. + + Regression test for https://github.com/home-assistant/core/issues/152937 + """ + await mock_bridge_v2.api.load_test_data(v2_resources_test_data) + await setup_platform( + hass, mock_bridge_v2, [Platform.BINARY_SENSOR, Platform.SENSOR] + ) + + # Create a device entry with a Hue ID that doesn't exist on the bridge + orphaned_device = device_registry.async_get_or_create( + config_entry_id=mock_bridge_v2.config_entry.entry_id, + identifiers={(hue.DOMAIN, "non-existent-hue-device-id")}, + ) + + triggers = await async_get_device_automations( + hass, DeviceAutomationType.TRIGGER, orphaned_device.id + ) + assert triggers == []