Home Assistant Unofficial Reference 2024.12.1
coordinator.py
Go to the documentation of this file.
1 """Coordinator to interact with an ESPHome dashboard."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 import logging
7 
8 import aiohttp
9 from awesomeversion import AwesomeVersion
10 from esphome_dashboard_api import ConfiguredDevice, ESPHomeDashboardAPI
11 
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
14 
15 _LOGGER = logging.getLogger(__name__)
16 
17 MIN_VERSION_SUPPORTS_UPDATE = AwesomeVersion("2023.1.0")
18 
19 
20 class ESPHomeDashboardCoordinator(DataUpdateCoordinator[dict[str, ConfiguredDevice]]):
21  """Class to interact with the ESPHome dashboard."""
22 
23  def __init__(
24  self,
25  hass: HomeAssistant,
26  addon_slug: str,
27  url: str,
28  session: aiohttp.ClientSession,
29  ) -> None:
30  """Initialize."""
31  super().__init__(
32  hass,
33  _LOGGER,
34  config_entry=None,
35  name="ESPHome Dashboard",
36  update_interval=timedelta(minutes=5),
37  always_update=False,
38  )
39  self.addon_slugaddon_slug = addon_slug
40  self.urlurl = url
41  self.apiapi = ESPHomeDashboardAPI(url, session)
42  self.supports_updatesupports_update: bool | None = None
43 
44  async def _async_update_data(self) -> dict:
45  """Fetch device data."""
46  devices = await self.apiapi.get_devices()
47  configured_devices = devices["configured"]
48 
49  if (
50  self.supports_updatesupports_update is None
51  and configured_devices
52  and (current_version := configured_devices[0].get("current_version"))
53  ):
54  self.supports_updatesupports_update = (
55  AwesomeVersion(current_version) > MIN_VERSION_SUPPORTS_UPDATE
56  )
57 
58  return {dev["name"]: dev for dev in configured_devices}
None __init__(self, HomeAssistant hass, str addon_slug, str url, aiohttp.ClientSession session)
Definition: coordinator.py:29
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88