Home Assistant Unofficial Reference 2024.12.1
coordinator.py
Go to the documentation of this file.
1 """Coordinator for Autarco integration."""
2 
3 from __future__ import annotations
4 
5 from typing import NamedTuple
6 
7 from autarco import (
8  AccountSite,
9  Autarco,
10  AutarcoConnectionError,
11  Battery,
12  Inverter,
13  Site,
14  Solar,
15 )
16 
17 from homeassistant.config_entries import ConfigEntry
18 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
20 
21 from .const import DOMAIN, LOGGER, SCAN_INTERVAL
22 
23 
24 class AutarcoData(NamedTuple):
25  """Class for defining data in dict."""
26 
27  solar: Solar
28  inverters: dict[str, Inverter]
29  site: Site
30  battery: Battery | None
31 
32 
34  """Class to manage fetching Autarco data from the API."""
35 
36  config_entry: ConfigEntry
37 
38  def __init__(
39  self,
40  hass: HomeAssistant,
41  client: Autarco,
42  account_site: AccountSite,
43  ) -> None:
44  """Initialize global Autarco data updater."""
45  super().__init__(
46  hass,
47  LOGGER,
48  name=DOMAIN,
49  update_interval=SCAN_INTERVAL,
50  )
51  self.clientclient = client
52  self.account_siteaccount_site = account_site
53 
54  async def _async_update_data(self) -> AutarcoData:
55  """Fetch data from Autarco API."""
56  battery = None
57  try:
58  site = await self.clientclient.get_site(self.account_siteaccount_site.public_key)
59  solar = await self.clientclient.get_solar(self.account_siteaccount_site.public_key)
60  inverters = await self.clientclient.get_inverters(self.account_siteaccount_site.public_key)
61  if site.has_battery:
62  battery = await self.clientclient.get_battery(self.account_siteaccount_site.public_key)
63  except AutarcoConnectionError as error:
64  raise UpdateFailed(error) from error
65  return AutarcoData(
66  solar=solar,
67  inverters=inverters,
68  site=site,
69  battery=battery,
70  )
None __init__(self, HomeAssistant hass, Autarco client, AccountSite account_site)
Definition: coordinator.py:43