1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-24 12:59:34 +00:00

Dynamically add Airzone entities (#121891)

* airzone: reload entry on new devices

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* Revert "airzone: reload entry on new devices"

This reverts commit 3ecc0844e4.

* airzone: sensor: dynamically add new entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* tests: restore reverted airzone tests

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: sensor: code fixes

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: water_heater: dynamically add entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: binary_sensor: dynamically add entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: select: dynamically add entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: climate: dynamically add entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* tests: airzone: use freezer

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: call async_add_entities once

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: wrap async_add_listener on async_on_unload

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: reduce number of entity listeners

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

---------

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
This commit is contained in:
Álvaro Fernández Rojas
2024-07-13 21:45:08 +02:00
committed by GitHub
parent 3111951757
commit c044417837
7 changed files with 203 additions and 65 deletions

View File

@@ -102,17 +102,31 @@ async def async_setup_entry(
entry: AirzoneConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone sensors from a config_entry."""
"""Add Airzone climate from a config_entry."""
coordinator = entry.runtime_data
async_add_entities(
AirzoneClimate(
coordinator,
entry,
system_zone_id,
zone_data,
)
for system_zone_id, zone_data in coordinator.data[AZD_ZONES].items()
)
added_zones: set[str] = set()
def _async_entity_listener() -> None:
"""Handle additions of climate."""
zones_data = coordinator.data.get(AZD_ZONES, {})
received_zones = set(zones_data)
new_zones = received_zones - added_zones
if new_zones:
async_add_entities(
AirzoneClimate(
coordinator,
entry,
system_zone_id,
zones_data.get(system_zone_id),
)
for system_zone_id in new_zones
)
added_zones.update(new_zones)
entry.async_on_unload(coordinator.async_add_listener(_async_entity_listener))
_async_entity_listener()
class AirzoneClimate(AirzoneZoneEntity, ClimateEntity):