1 """The Airzone integration."""
3 from __future__
import annotations
8 from aioairzone.const
import AZD_MAC, AZD_WEBSERVER, DEFAULT_SYSTEM_ID
9 from aioairzone.localapi
import AirzoneLocalApi, ConnectionOptions
16 device_registry
as dr,
17 entity_registry
as er,
20 from .coordinator
import AirzoneUpdateCoordinator
22 PLATFORMS: list[Platform] = [
23 Platform.BINARY_SENSOR,
28 Platform.WATER_HEATER,
31 _LOGGER = logging.getLogger(__name__)
33 type AirzoneConfigEntry = ConfigEntry[AirzoneUpdateCoordinator]
38 entry: AirzoneConfigEntry,
39 coordinator: AirzoneUpdateCoordinator,
41 """Migrate entities when the mac address gets discovered."""
44 def _async_migrator(entity_entry: er.RegistryEntry) -> dict[str, Any] |
None:
47 unique_id = entry.unique_id
48 entry_id = entry.entry_id
49 entity_unique_id = entity_entry.unique_id
51 if entity_unique_id.startswith(entry_id):
52 new_unique_id = f
"{unique_id}{entity_unique_id.removeprefix(entry_id)}"
54 "Migrating unique_id from [%s] to [%s]",
58 updates = {
"new_unique_id": new_unique_id}
63 entry.unique_id
is None
64 and AZD_WEBSERVER
in coordinator.data
65 and AZD_MAC
in coordinator.data[AZD_WEBSERVER]
66 and (mac := coordinator.data[AZD_WEBSERVER][AZD_MAC])
is not None
68 updates: dict[str, Any] = {
69 "unique_id": dr.format_mac(mac),
71 hass.config_entries.async_update_entry(entry, **updates)
73 await er.async_migrate_entries(hass, entry.entry_id, _async_migrator)
77 """Set up Airzone from a config entry."""
78 options = ConnectionOptions(
79 entry.data[CONF_HOST],
80 entry.data[CONF_PORT],
81 entry.data.get(CONF_ID, DEFAULT_SYSTEM_ID),
84 airzone = AirzoneLocalApi(aiohttp_client.async_get_clientsession(hass), options)
86 await coordinator.async_config_entry_first_refresh()
89 entry.runtime_data = coordinator
91 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
97 """Unload a config entry."""
98 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
bool async_setup_entry(HomeAssistant hass, AirzoneConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, AirzoneConfigEntry entry)
None _async_migrate_unique_ids(HomeAssistant hass, AirzoneConfigEntry entry, AirzoneUpdateCoordinator coordinator)