Ensure platform setup for all AVM FRITZ!SmartHome devices (#105515)
This commit is contained in:
parent
ebb54d7a6c
commit
bfdadd12e9
7 changed files with 44 additions and 35 deletions
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Reference in a new issue