diff --git a/homeassistant/components/fritzbox/binary_sensor.py b/homeassistant/components/fritzbox/binary_sensor.py index 2460635351e..e766a53518a 100644 --- a/homeassistant/components/fritzbox/binary_sensor.py +++ b/homeassistant/components/fritzbox/binary_sensor.py @@ -70,20 +70,22 @@ async def async_setup_entry( coordinator = get_coordinator(hass, entry.entry_id) @callback - def _add_entities() -> None: + def _add_entities(devices: set[str] | None = None) -> None: """Add devices.""" - if not coordinator.new_devices: + if devices is None: + devices = coordinator.new_devices + if not devices: return async_add_entities( FritzboxBinarySensor(coordinator, ain, description) - for ain in coordinator.new_devices + for ain in devices for description in BINARY_SENSOR_TYPES if description.suitable(coordinator.data.devices[ain]) ) entry.async_on_unload(coordinator.async_add_listener(_add_entities)) - _add_entities() + _add_entities(set(coordinator.data.devices.keys())) class FritzboxBinarySensor(FritzBoxDeviceEntity, BinarySensorEntity): diff --git a/homeassistant/components/fritzbox/button.py b/homeassistant/components/fritzbox/button.py index 732c41bfb7d..e56ebc1e3b0 100644 --- a/homeassistant/components/fritzbox/button.py +++ b/homeassistant/components/fritzbox/button.py @@ -19,17 +19,17 @@ async def async_setup_entry( coordinator = get_coordinator(hass, entry.entry_id) @callback - def _add_entities() -> None: + def _add_entities(templates: set[str] | None = None) -> None: """Add templates.""" - if not coordinator.new_templates: + if templates is None: + templates = coordinator.new_templates + if not templates: return - async_add_entities( - FritzBoxTemplate(coordinator, ain) for ain in coordinator.new_templates - ) + async_add_entities(FritzBoxTemplate(coordinator, ain) for ain in templates) entry.async_on_unload(coordinator.async_add_listener(_add_entities)) - _add_entities() + _add_entities(set(coordinator.data.templates.keys())) class FritzBoxTemplate(FritzBoxEntity, ButtonEntity): diff --git a/homeassistant/components/fritzbox/climate.py b/homeassistant/components/fritzbox/climate.py index 70359d9b2af..6ce885a3fdb 100644 --- a/homeassistant/components/fritzbox/climate.py +++ b/homeassistant/components/fritzbox/climate.py @@ -52,19 +52,21 @@ async def async_setup_entry( coordinator = get_coordinator(hass, entry.entry_id) @callback - def _add_entities() -> None: + def _add_entities(devices: set[str] | None = None) -> None: """Add devices.""" - if not coordinator.new_devices: + if devices is None: + devices = coordinator.new_devices + if not devices: return async_add_entities( FritzboxThermostat(coordinator, ain) - for ain in coordinator.new_devices + for ain in devices if coordinator.data.devices[ain].has_thermostat ) entry.async_on_unload(coordinator.async_add_listener(_add_entities)) - _add_entities() + _add_entities(set(coordinator.data.devices.keys())) class FritzboxThermostat(FritzBoxDeviceEntity, ClimateEntity): diff --git a/homeassistant/components/fritzbox/cover.py b/homeassistant/components/fritzbox/cover.py index 7d27356fdf9..d3d4c9080ea 100644 --- a/homeassistant/components/fritzbox/cover.py +++ b/homeassistant/components/fritzbox/cover.py @@ -24,19 +24,21 @@ async def async_setup_entry( coordinator = get_coordinator(hass, entry.entry_id) @callback - def _add_entities() -> None: + def _add_entities(devices: set[str] | None = None) -> None: """Add devices.""" - if not coordinator.new_devices: + if devices is None: + devices = coordinator.new_devices + if not devices: return async_add_entities( FritzboxCover(coordinator, ain) - for ain in coordinator.new_devices + for ain in devices if coordinator.data.devices[ain].has_blind ) entry.async_on_unload(coordinator.async_add_listener(_add_entities)) - _add_entities() + _add_entities(set(coordinator.data.devices.keys())) class FritzboxCover(FritzBoxDeviceEntity, CoverEntity): diff --git a/homeassistant/components/fritzbox/light.py b/homeassistant/components/fritzbox/light.py index 8dc51e59738..88d32fe33a5 100644 --- a/homeassistant/components/fritzbox/light.py +++ b/homeassistant/components/fritzbox/light.py @@ -30,22 +30,21 @@ async def async_setup_entry( coordinator = get_coordinator(hass, entry.entry_id) @callback - def _add_entities() -> None: + def _add_entities(devices: set[str] | None = None) -> None: """Add devices.""" - if not coordinator.new_devices: + if devices is None: + devices = coordinator.new_devices + if not devices: return async_add_entities( - FritzboxLight( - coordinator, - ain, - ) - for ain in coordinator.new_devices - if (coordinator.data.devices[ain]).has_lightbulb + FritzboxLight(coordinator, ain) + for ain in devices + if coordinator.data.devices[ain].has_lightbulb ) entry.async_on_unload(coordinator.async_add_listener(_add_entities)) - _add_entities() + _add_entities(set(coordinator.data.devices.keys())) class FritzboxLight(FritzBoxDeviceEntity, LightEntity): diff --git a/homeassistant/components/fritzbox/sensor.py b/homeassistant/components/fritzbox/sensor.py index 1e5d7754934..fda8b239859 100644 --- a/homeassistant/components/fritzbox/sensor.py +++ b/homeassistant/components/fritzbox/sensor.py @@ -215,20 +215,22 @@ async def async_setup_entry( coordinator = get_coordinator(hass, entry.entry_id) @callback - def _add_entities() -> None: + def _add_entities(devices: set[str] | None = None) -> None: """Add devices.""" - if not coordinator.new_devices: + if devices is None: + devices = coordinator.new_devices + if not devices: return async_add_entities( FritzBoxSensor(coordinator, ain, description) - for ain in coordinator.new_devices + for ain in devices for description in SENSOR_TYPES if description.suitable(coordinator.data.devices[ain]) ) entry.async_on_unload(coordinator.async_add_listener(_add_entities)) - _add_entities() + _add_entities(set(coordinator.data.devices.keys())) class FritzBoxSensor(FritzBoxDeviceEntity, SensorEntity): diff --git a/homeassistant/components/fritzbox/switch.py b/homeassistant/components/fritzbox/switch.py index 617a5242c5b..4a2960a18ea 100644 --- a/homeassistant/components/fritzbox/switch.py +++ b/homeassistant/components/fritzbox/switch.py @@ -19,19 +19,21 @@ async def async_setup_entry( coordinator = get_coordinator(hass, entry.entry_id) @callback - def _add_entities() -> None: + def _add_entities(devices: set[str] | None = None) -> None: """Add devices.""" - if not coordinator.new_devices: + if devices is None: + devices = coordinator.new_devices + if not devices: return async_add_entities( FritzboxSwitch(coordinator, ain) - for ain in coordinator.new_devices + for ain in devices if coordinator.data.devices[ain].has_switch ) entry.async_on_unload(coordinator.async_add_listener(_add_entities)) - _add_entities() + _add_entities(set(coordinator.data.devices.keys())) class FritzboxSwitch(FritzBoxDeviceEntity, SwitchEntity):