1 """DataUpdateCoordinator for the Hydrawise integration."""
3 from __future__
import annotations
5 from dataclasses
import dataclass, field
7 from pydrawise
import Hydrawise
8 from pydrawise.schema
import Controller, ControllerWaterUseSummary, Sensor, User, Zone
14 from .const
import DOMAIN, LOGGER, MAIN_SCAN_INTERVAL, WATER_USE_SCAN_INTERVAL
19 """Container for data fetched from the Hydrawise API."""
22 controllers: dict[int, Controller] = field(default_factory=dict)
23 zones: dict[int, Zone] = field(default_factory=dict)
24 sensors: dict[int, Sensor] = field(default_factory=dict)
25 daily_water_summary: dict[int, ControllerWaterUseSummary] = field(
32 """Container for all Hydrawise DataUpdateCoordinator instances."""
34 main: HydrawiseMainDataUpdateCoordinator
35 water_use: HydrawiseWaterUseDataUpdateCoordinator
39 """Base class for Hydrawise Data Update Coordinators."""
45 """The main Hydrawise Data Update Coordinator.
47 This fetches the primary state data for Hydrawise controllers and zones
48 at a relatively frequent interval so that the primary functions of the
49 integration are updated in a timely manner.
52 def __init__(self, hass: HomeAssistant, api: Hydrawise) ->
None:
53 """Initialize HydrawiseDataUpdateCoordinator."""
54 super().
__init__(hass, LOGGER, name=DOMAIN, update_interval=MAIN_SCAN_INTERVAL)
58 """Fetch the latest data from Hydrawise."""
63 for controller
in data.user.controllers:
64 data.controllers[controller.id] = controller
65 controller.zones = await self.
apiapi.get_zones(controller)
66 for zone
in controller.zones:
67 data.zones[zone.id] = zone
68 for sensor
in controller.sensors:
69 data.sensors[sensor.id] = sensor
74 """Data Update Coordinator for Hydrawise Water Use.
76 This fetches data that is more expensive for the Hydrawise API to compute
77 at a less frequent interval as to not overload the Hydrawise servers.
80 _main_coordinator: HydrawiseMainDataUpdateCoordinator
86 main_coordinator: HydrawiseMainDataUpdateCoordinator,
88 """Initialize HydrawiseWaterUseDataUpdateCoordinator."""
92 name=f
"{DOMAIN} water use",
93 update_interval=WATER_USE_SCAN_INTERVAL,
99 """Fetch the latest data from Hydrawise."""
100 daily_water_summary: dict[int, ControllerWaterUseSummary] = {}
101 for controller
in self.
_main_coordinator_main_coordinator.data.controllers.values():
102 daily_water_summary[controller.id] = await self.
apiapi.get_water_use_summary(
104 now().replace(hour=0, minute=0, second=0, microsecond=0),
110 controllers=main_data.controllers,
111 zones=main_data.zones,
112 sensors=main_data.sensors,
113 daily_water_summary=daily_water_summary,
HydrawiseData _async_update_data(self)
None __init__(self, HomeAssistant hass, Hydrawise api)
HydrawiseData _async_update_data(self)
None __init__(self, HomeAssistant hass, Hydrawise api, HydrawiseMainDataUpdateCoordinator main_coordinator)
datetime now(HomeAssistant hass)