Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The Landis+Gyr Heat Meter integration."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 import ultraheat_api
9 
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import CONF_DEVICE, Platform
12 from homeassistant.core import HomeAssistant, callback
13 from homeassistant.helpers.entity_registry import RegistryEntry, async_migrate_entries
14 
15 from .const import DOMAIN
16 from .coordinator import UltraheatCoordinator
17 
18 _LOGGER = logging.getLogger(__name__)
19 
20 PLATFORMS: list[Platform] = [Platform.SENSOR]
21 
22 
23 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
24  """Set up heat meter from a config entry."""
25 
26  _LOGGER.debug("Initializing %s integration on %s", DOMAIN, entry.data[CONF_DEVICE])
27  reader = ultraheat_api.UltraheatReader(entry.data[CONF_DEVICE])
28  api = ultraheat_api.HeatMeterService(reader)
29 
30  coordinator = UltraheatCoordinator(hass, api)
31  await coordinator.async_config_entry_first_refresh()
32 
33  hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
34 
35  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
36 
37  return True
38 
39 
40 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
41  """Unload a config entry."""
42  if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
43  hass.data[DOMAIN].pop(entry.entry_id)
44 
45  return unload_ok
46 
47 
48 async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
49  """Migrate old entry."""
50  _LOGGER.debug("Migrating from version %s", config_entry.version)
51 
52  # Removing domain name and config entry id from entity unique id's, replacing it with device number
53  if config_entry.version == 1:
54  hass.config_entries.async_update_entry(config_entry, version=2)
55 
56  device_number = config_entry.data["device_number"]
57 
58  @callback
59  def update_entity_unique_id(
60  entity_entry: RegistryEntry,
61  ) -> dict[str, Any] | None:
62  """Update unique ID of entity entry."""
63  if entity_entry.platform in entity_entry.unique_id:
64  return {
65  "new_unique_id": entity_entry.unique_id.replace(
66  f"{entity_entry.platform}_{entity_entry.config_entry_id}",
67  f"{device_number}",
68  )
69  }
70  return None
71 
73  hass, config_entry.entry_id, update_entity_unique_id
74  )
75 
76  _LOGGER.debug("Migration to version %s successful", config_entry.version)
77 
78  return True
None async_migrate_entries(HomeAssistant hass, dict[str, AdapterDetails] adapters, str default_adapter)
Definition: __init__.py:249
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:40
bool async_migrate_entry(HomeAssistant hass, ConfigEntry config_entry)
Definition: __init__.py:48
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:23