Home Assistant Unofficial Reference 2024.12.1
coordinator.py
Go to the documentation of this file.
1 """DataUpdateCoordinator for the ping integration."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 from datetime import timedelta
7 import logging
8 from typing import Any
9 
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
12 
13 from .helpers import PingDataICMPLib, PingDataSubProcess
14 
15 _LOGGER = logging.getLogger(__name__)
16 
17 
18 @dataclass(slots=True, frozen=True)
19 class PingResult:
20  """Dataclass returned by the coordinator."""
21 
22  ip_address: str
23  is_alive: bool
24  data: dict[str, Any]
25 
26 
28  """The Ping update coordinator."""
29 
30  ping: PingDataSubProcess | PingDataICMPLib
31 
32  def __init__(
33  self,
34  hass: HomeAssistant,
35  ping: PingDataSubProcess | PingDataICMPLib,
36  ) -> None:
37  """Initialize the Ping coordinator."""
38  self.pingping = ping
39 
40  super().__init__(
41  hass,
42  _LOGGER,
43  name=f"Ping {ping.ip_address}",
44  update_interval=timedelta(seconds=30),
45  )
46 
47  async def _async_update_data(self) -> PingResult:
48  """Trigger ping check."""
49  await self.pingping.async_update()
50  return PingResult(
51  ip_address=self.pingping.ip_address,
52  is_alive=self.pingping.is_alive,
53  data=self.pingping.data or {},
54  )
None __init__(self, HomeAssistant hass, PingDataSubProcess|PingDataICMPLib ping)
Definition: coordinator.py:36