Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """Base classes for Hydrawise entities."""
2 
3 from __future__ import annotations
4 
5 from pydrawise.schema import Controller, Sensor, Zone
6 
7 from homeassistant.core import callback
8 from homeassistant.helpers.device_registry import DeviceInfo
9 from homeassistant.helpers.entity import EntityDescription
10 from homeassistant.helpers.update_coordinator import CoordinatorEntity
11 
12 from .const import DOMAIN, MANUFACTURER
13 from .coordinator import HydrawiseDataUpdateCoordinator
14 
15 
16 class HydrawiseEntity(CoordinatorEntity[HydrawiseDataUpdateCoordinator]):
17  """Entity class for Hydrawise devices."""
18 
19  _attr_attribution = "Data provided by hydrawise.com"
20  _attr_has_entity_name = True
21 
22  def __init__(
23  self,
24  coordinator: HydrawiseDataUpdateCoordinator,
25  description: EntityDescription,
26  controller: Controller,
27  *,
28  zone_id: int | None = None,
29  sensor_id: int | None = None,
30  ) -> None:
31  """Initialize the Hydrawise entity."""
32  super().__init__(coordinator=coordinator)
33  self.entity_descriptionentity_description = description
34  self.controllercontroller = controller
35  self.zone_idzone_id = zone_id
36  self.sensor_idsensor_id = sensor_id
37  self._device_id_device_id = str(zone_id) if zone_id is not None else str(controller.id)
38  self._attr_unique_id_attr_unique_id = f"{self._device_id}_{description.key}"
39  self._attr_device_info_attr_device_info = DeviceInfo(
40  identifiers={(DOMAIN, self._device_id_device_id)},
41  name=self.zonezone.name if zone_id is not None else controller.name,
42  model=(
43  "Zone" if zone_id is not None else controller.hardware.model.description
44  ),
45  manufacturer=MANUFACTURER,
46  )
47  if zone_id is not None or sensor_id is not None:
48  self._attr_device_info_attr_device_info["via_device"] = (DOMAIN, str(controller.id))
49  self._update_attrs_update_attrs()
50 
51  @property
52  def zone(self) -> Zone:
53  """Return the entity zone."""
54  assert self.zone_idzone_id is not None # needed for mypy
55  return self.coordinator.data.zones[self.zone_idzone_id]
56 
57  @property
58  def sensor(self) -> Sensor:
59  """Return the entity sensor."""
60  assert self.sensor_idsensor_id is not None # needed for mypy
61  return self.coordinator.data.sensors[self.sensor_idsensor_id]
62 
63  def _update_attrs(self) -> None:
64  """Update state attributes."""
65  return # pragma: no cover
66 
67  @callback
68  def _handle_coordinator_update(self) -> None:
69  """Get the latest data and updates the state."""
70  self.controllercontroller = self.coordinator.data.controllers[self.controllercontroller.id]
71  self._update_attrs_update_attrs()
73 
74  @property
75  def available(self) -> bool:
76  """Set the entity availability."""
77  return super().available and self.controllercontroller.online
None __init__(self, HydrawiseDataUpdateCoordinator coordinator, EntityDescription description, Controller controller, *int|None zone_id=None, int|None sensor_id=None)
Definition: entity.py:30