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 GitHub
parent dd5a48996a
commit 08ca3678da
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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) coordinator = get_coordinator(hass, entry.entry_id)
@callback @callback
def _add_entities() -> None: def _add_entities(devices: set[str] | None = None) -> None:
"""Add devices.""" """Add devices."""
if not coordinator.new_devices: if devices is None:
devices = coordinator.new_devices
if not devices:
return return
async_add_entities( async_add_entities(
FritzboxBinarySensor(coordinator, ain, description) FritzboxBinarySensor(coordinator, ain, description)
for ain in coordinator.new_devices for ain in devices
for description in BINARY_SENSOR_TYPES for description in BINARY_SENSOR_TYPES
if description.suitable(coordinator.data.devices[ain]) if description.suitable(coordinator.data.devices[ain])
) )
entry.async_on_unload(coordinator.async_add_listener(_add_entities)) entry.async_on_unload(coordinator.async_add_listener(_add_entities))
_add_entities() _add_entities(set(coordinator.data.devices.keys()))
class FritzboxBinarySensor(FritzBoxDeviceEntity, BinarySensorEntity): class FritzboxBinarySensor(FritzBoxDeviceEntity, BinarySensorEntity):

View file

@ -19,17 +19,17 @@ async def async_setup_entry(
coordinator = get_coordinator(hass, entry.entry_id) coordinator = get_coordinator(hass, entry.entry_id)
@callback @callback
def _add_entities() -> None: def _add_entities(templates: set[str] | None = None) -> None:
"""Add templates.""" """Add templates."""
if not coordinator.new_templates: if templates is None:
templates = coordinator.new_templates
if not templates:
return return
async_add_entities( async_add_entities(FritzBoxTemplate(coordinator, ain) for ain in templates)
FritzBoxTemplate(coordinator, ain) for ain in coordinator.new_templates
)
entry.async_on_unload(coordinator.async_add_listener(_add_entities)) entry.async_on_unload(coordinator.async_add_listener(_add_entities))
_add_entities() _add_entities(set(coordinator.data.templates.keys()))
class FritzBoxTemplate(FritzBoxEntity, ButtonEntity): class FritzBoxTemplate(FritzBoxEntity, ButtonEntity):

View file

@ -52,19 +52,21 @@ async def async_setup_entry(
coordinator = get_coordinator(hass, entry.entry_id) coordinator = get_coordinator(hass, entry.entry_id)
@callback @callback
def _add_entities() -> None: def _add_entities(devices: set[str] | None = None) -> None:
"""Add devices.""" """Add devices."""
if not coordinator.new_devices: if devices is None:
devices = coordinator.new_devices
if not devices:
return return
async_add_entities( async_add_entities(
FritzboxThermostat(coordinator, ain) FritzboxThermostat(coordinator, ain)
for ain in coordinator.new_devices for ain in devices
if coordinator.data.devices[ain].has_thermostat if coordinator.data.devices[ain].has_thermostat
) )
entry.async_on_unload(coordinator.async_add_listener(_add_entities)) entry.async_on_unload(coordinator.async_add_listener(_add_entities))
_add_entities() _add_entities(set(coordinator.data.devices.keys()))
class FritzboxThermostat(FritzBoxDeviceEntity, ClimateEntity): class FritzboxThermostat(FritzBoxDeviceEntity, ClimateEntity):

View file

@ -24,19 +24,21 @@ async def async_setup_entry(
coordinator = get_coordinator(hass, entry.entry_id) coordinator = get_coordinator(hass, entry.entry_id)
@callback @callback
def _add_entities() -> None: def _add_entities(devices: set[str] | None = None) -> None:
"""Add devices.""" """Add devices."""
if not coordinator.new_devices: if devices is None:
devices = coordinator.new_devices
if not devices:
return return
async_add_entities( async_add_entities(
FritzboxCover(coordinator, ain) FritzboxCover(coordinator, ain)
for ain in coordinator.new_devices for ain in devices
if coordinator.data.devices[ain].has_blind if coordinator.data.devices[ain].has_blind
) )
entry.async_on_unload(coordinator.async_add_listener(_add_entities)) entry.async_on_unload(coordinator.async_add_listener(_add_entities))
_add_entities() _add_entities(set(coordinator.data.devices.keys()))
class FritzboxCover(FritzBoxDeviceEntity, CoverEntity): class FritzboxCover(FritzBoxDeviceEntity, CoverEntity):

View file

@ -30,22 +30,21 @@ async def async_setup_entry(
coordinator = get_coordinator(hass, entry.entry_id) coordinator = get_coordinator(hass, entry.entry_id)
@callback @callback
def _add_entities() -> None: def _add_entities(devices: set[str] | None = None) -> None:
"""Add devices.""" """Add devices."""
if not coordinator.new_devices: if devices is None:
devices = coordinator.new_devices
if not devices:
return return
async_add_entities( async_add_entities(
FritzboxLight( FritzboxLight(coordinator, ain)
coordinator, for ain in devices
ain, if coordinator.data.devices[ain].has_lightbulb
)
for ain in coordinator.new_devices
if (coordinator.data.devices[ain]).has_lightbulb
) )
entry.async_on_unload(coordinator.async_add_listener(_add_entities)) entry.async_on_unload(coordinator.async_add_listener(_add_entities))
_add_entities() _add_entities(set(coordinator.data.devices.keys()))
class FritzboxLight(FritzBoxDeviceEntity, LightEntity): class FritzboxLight(FritzBoxDeviceEntity, LightEntity):

View file

@ -215,20 +215,22 @@ async def async_setup_entry(
coordinator = get_coordinator(hass, entry.entry_id) coordinator = get_coordinator(hass, entry.entry_id)
@callback @callback
def _add_entities() -> None: def _add_entities(devices: set[str] | None = None) -> None:
"""Add devices.""" """Add devices."""
if not coordinator.new_devices: if devices is None:
devices = coordinator.new_devices
if not devices:
return return
async_add_entities( async_add_entities(
FritzBoxSensor(coordinator, ain, description) FritzBoxSensor(coordinator, ain, description)
for ain in coordinator.new_devices for ain in devices
for description in SENSOR_TYPES for description in SENSOR_TYPES
if description.suitable(coordinator.data.devices[ain]) if description.suitable(coordinator.data.devices[ain])
) )
entry.async_on_unload(coordinator.async_add_listener(_add_entities)) entry.async_on_unload(coordinator.async_add_listener(_add_entities))
_add_entities() _add_entities(set(coordinator.data.devices.keys()))
class FritzBoxSensor(FritzBoxDeviceEntity, SensorEntity): class FritzBoxSensor(FritzBoxDeviceEntity, SensorEntity):

View file

@ -19,19 +19,21 @@ async def async_setup_entry(
coordinator = get_coordinator(hass, entry.entry_id) coordinator = get_coordinator(hass, entry.entry_id)
@callback @callback
def _add_entities() -> None: def _add_entities(devices: set[str] | None = None) -> None:
"""Add devices.""" """Add devices."""
if not coordinator.new_devices: if devices is None:
devices = coordinator.new_devices
if not devices:
return return
async_add_entities( async_add_entities(
FritzboxSwitch(coordinator, ain) FritzboxSwitch(coordinator, ain)
for ain in coordinator.new_devices for ain in devices
if coordinator.data.devices[ain].has_switch if coordinator.data.devices[ain].has_switch
) )
entry.async_on_unload(coordinator.async_add_listener(_add_entities)) entry.async_on_unload(coordinator.async_add_listener(_add_entities))
_add_entities() _add_entities(set(coordinator.data.devices.keys()))
class FritzboxSwitch(FritzBoxDeviceEntity, SwitchEntity): class FritzboxSwitch(FritzBoxDeviceEntity, SwitchEntity):