Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The Sensibo component."""
2 
3 from __future__ import annotations
4 
5 from pysensibo.exceptions import AuthenticationError
6 
7 from homeassistant.components.climate import DOMAIN as CLIMATE_DOMAIN
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import CONF_API_KEY
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers import entity_registry as er
12 from homeassistant.helpers.device_registry import DeviceEntry
13 
14 from .const import DOMAIN, LOGGER, PLATFORMS
15 from .coordinator import SensiboDataUpdateCoordinator
16 from .util import NoDevicesError, NoUsernameError, async_validate_api
17 
18 type SensiboConfigEntry = ConfigEntry[SensiboDataUpdateCoordinator]
19 
20 
21 async def async_setup_entry(hass: HomeAssistant, entry: SensiboConfigEntry) -> bool:
22  """Set up Sensibo from a config entry."""
23 
24  coordinator = SensiboDataUpdateCoordinator(hass)
25  await coordinator.async_config_entry_first_refresh()
26  entry.runtime_data = coordinator
27 
28  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
29 
30  return True
31 
32 
33 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
34  """Unload Sensibo config entry."""
35  return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
36 
37 
38 async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
39  """Migrate old entry."""
40  # Change entry unique id from api_key to username
41  if entry.version == 1:
42  api_key = entry.data[CONF_API_KEY]
43 
44  try:
45  new_unique_id = await async_validate_api(hass, api_key)
46  except (AuthenticationError, ConnectionError, NoDevicesError, NoUsernameError):
47  return False
48 
49  LOGGER.debug("Migrate Sensibo config entry unique id to %s", new_unique_id)
50  hass.config_entries.async_update_entry(
51  entry,
52  unique_id=new_unique_id,
53  version=2,
54  )
55 
56  return True
57 
58 
60  hass: HomeAssistant, entry: ConfigEntry, device: DeviceEntry
61 ) -> bool:
62  """Remove Sensibo config entry from a device."""
63  entity_registry = er.async_get(hass)
64  for identifier in device.identifiers:
65  if identifier[0] == DOMAIN and entity_registry.async_get_entity_id(
66  CLIMATE_DOMAIN, DOMAIN, identifier[1]
67  ):
68  return False
69 
70  return True
str async_validate_api(HomeAssistant hass, str api_key)
Definition: util.py:16
bool async_migrate_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:38
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:33
bool async_remove_config_entry_device(HomeAssistant hass, ConfigEntry entry, DeviceEntry device)
Definition: __init__.py:61
bool async_setup_entry(HomeAssistant hass, SensiboConfigEntry entry)
Definition: __init__.py:21