Ensure platform setup for all AVM FRITZ!SmartHome devices (#105515)

This commit is contained in:
Michael 2023-12-13 18:07:29 +01:00 committed by Franck Nijhof
parent ebb54d7a6c
commit bfdadd12e9
No known key found for this signature in database
GPG key ID: D62583BA8AB11CA3
7 changed files with 44 additions and 35 deletions

View file

@ -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):

View file

@ -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):

View file

@ -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):

View file

@ -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):

View file

@ -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):

View file

@ -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):

View file

@ -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):