Skip to content

Commit

Permalink
Ensure platform setup for all AVM FRITZ!SmartHome devices (#105515)
Browse files Browse the repository at this point in the history
  • Loading branch information
mib1185 authored and frenck committed Dec 14, 2023
1 parent ebb54d7 commit bfdadd1
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 35 deletions.
10 changes: 6 additions & 4 deletions homeassistant/components/fritzbox/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
12 changes: 6 additions & 6 deletions homeassistant/components/fritzbox/button.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
10 changes: 6 additions & 4 deletions homeassistant/components/fritzbox/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
10 changes: 6 additions & 4 deletions homeassistant/components/fritzbox/cover.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
17 changes: 8 additions & 9 deletions homeassistant/components/fritzbox/light.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
10 changes: 6 additions & 4 deletions homeassistant/components/fritzbox/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
10 changes: 6 additions & 4 deletions homeassistant/components/fritzbox/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down

0 comments on commit bfdadd1

Please sign in to comment.