Home Assistant Unofficial Reference 2024.12.1
coordinator.py
Go to the documentation of this file.
1 """Coordinator for Fujitsu HVAC integration."""
2 
3 import logging
4 
5 from ayla_iot_unofficial import AylaApi, AylaAuthError
6 from ayla_iot_unofficial.fujitsu_hvac import FujitsuHVAC
7 
8 from homeassistant.core import HomeAssistant
9 from homeassistant.exceptions import ConfigEntryAuthFailed
10 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
11 
12 from .const import API_REFRESH
13 
14 _LOGGER = logging.getLogger(__name__)
15 
16 
17 class FGLairCoordinator(DataUpdateCoordinator[dict[str, FujitsuHVAC]]):
18  """Coordinator for Fujitsu HVAC integration."""
19 
20  def __init__(self, hass: HomeAssistant, api: AylaApi) -> None:
21  """Initialize coordinator for Fujitsu HVAC integration."""
22  super().__init__(
23  hass,
24  _LOGGER,
25  name="Fujitsu HVAC data",
26  update_interval=API_REFRESH,
27  )
28  self.apiapi = api
29 
30  async def _async_setup(self) -> None:
31  try:
32  await self.apiapi.async_sign_in()
33  except AylaAuthError as e:
34  raise ConfigEntryAuthFailed("Credentials expired for Ayla IoT API") from e
35 
36  async def _async_update_data(self) -> dict[str, FujitsuHVAC]:
37  """Fetch data from api endpoint."""
38  listening_entities = set(self.async_contextsasync_contexts())
39  try:
40  if self.apiapi.token_expired:
41  await self.apiapi.async_sign_in()
42 
43  if self.apiapi.token_expiring_soon:
44  await self.apiapi.async_refresh_auth()
45 
46  devices = await self.apiapi.async_get_devices()
47  except AylaAuthError as e:
48  raise ConfigEntryAuthFailed("Credentials expired for Ayla IoT API") from e
49 
50  if not listening_entities:
51  devices = [dev for dev in devices if isinstance(dev, FujitsuHVAC)]
52  else:
53  devices = [
54  dev for dev in devices if dev.device_serial_number in listening_entities
55  ]
56 
57  try:
58  for dev in devices:
59  await dev.async_update()
60  except AylaAuthError as e:
61  raise ConfigEntryAuthFailed("Credentials expired for Ayla IoT API") from e
62 
63  return {d.device_serial_number: d for d in devices}
None __init__(self, HomeAssistant hass, AylaApi api)
Definition: coordinator.py:20
Generator[ProtectAdoptableDeviceModel] async_get_devices(Bootstrap bootstrap, Iterable[ModelType] model_type)
Definition: utils.py:85