Ensure platform setup for all AVM FRITZ!SmartHome devices (#105515)
This commit is contained in:
parent
dd5a48996a
commit
08ca3678da
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)
|
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):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue