Home Assistant Unofficial Reference 2024.12.1
coordinator.py
Go to the documentation of this file.
1 """DataUpdateCoordinator for permobil integration."""
2 
3 import asyncio
4 from dataclasses import dataclass
5 from datetime import timedelta
6 import logging
7 
8 from mypermobil import MyPermobil, MyPermobilAPIException
9 
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
12 
13 _LOGGER = logging.getLogger(__name__)
14 
15 
16 @dataclass
18  """MyPermobil data stored in the DataUpdateCoordinator."""
19 
20  battery: dict[str, str | float | int | bool | list | dict]
21  daily_usage: dict[str, str | float | int | list | dict]
22  records: dict[str, str | float | int | list | dict]
23 
24 
26  """MyPermobil coordinator."""
27 
28  def __init__(self, hass: HomeAssistant, p_api: MyPermobil) -> None:
29  """Initialize my coordinator."""
30  super().__init__(
31  hass,
32  _LOGGER,
33  name="permobil",
34  update_interval=timedelta(minutes=5),
35  )
36  self.p_apip_api = p_api
37 
38  async def _async_update_data(self) -> MyPermobilData:
39  """Fetch data from the 3 API endpoints."""
40  try:
41  async with asyncio.timeout(10):
42  battery = await self.p_apip_api.get_battery_info()
43  daily_usage = await self.p_apip_api.get_daily_usage()
44  records = await self.p_apip_api.get_usage_records()
45  return MyPermobilData(
46  battery=battery,
47  daily_usage=daily_usage,
48  records=records,
49  )
50 
51  except MyPermobilAPIException as err:
52  _LOGGER.exception(
53  "Error fetching data from MyPermobil API for account %s",
54  self.p_apip_api.email,
55  )
56  raise UpdateFailed from err
None __init__(self, HomeAssistant hass, MyPermobil p_api)
Definition: coordinator.py:28