Home Assistant Unofficial Reference 2024.12.1
coordinator.py
Go to the documentation of this file.
1 """Coordinator for Rova."""
2 
3 from datetime import datetime, timedelta
4 
5 from rova.rova import Rova
6 
7 from homeassistant.core import HomeAssistant
8 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
9 from homeassistant.util.dt import get_time_zone
10 
11 from .const import DOMAIN, LOGGER
12 
13 EUROPE_AMSTERDAM_ZONE_INFO = get_time_zone("Europe/Amsterdam")
14 
15 
16 class RovaCoordinator(DataUpdateCoordinator[dict[str, datetime]]):
17  """Class to manage fetching Rova data."""
18 
19  def __init__(self, hass: HomeAssistant, api: Rova) -> None:
20  """Initialize."""
21  super().__init__(
22  hass,
23  LOGGER,
24  name=DOMAIN,
25  update_interval=timedelta(hours=12),
26  )
27  self.apiapi = api
28 
29  async def _async_update_data(self) -> dict[str, datetime]:
30  """Fetch data from Rova API."""
31 
32  items = await self.hasshass.async_add_executor_job(self.apiapi.get_calendar_items)
33 
34  data = {}
35 
36  for item in items:
37  date = datetime.strptime(item["Date"], "%Y-%m-%dT%H:%M:%S").replace(
38  tzinfo=EUROPE_AMSTERDAM_ZONE_INFO
39  )
40  code = item["GarbageTypeCode"].lower()
41  if code not in data:
42  data[code] = date
43 
44  return data
None __init__(self, HomeAssistant hass, Rova api)
Definition: coordinator.py:19
zoneinfo.ZoneInfo|None get_time_zone(str time_zone_str)
Definition: dt.py:98