Add flow and rain sensor support to Hydrawise (#116303)
* Add flow and rain sensor support to Hydrawise * Address comments * Cleanup * Review comments * Address review comments * Added tests * Add icon translations * Add snapshot tests * Clean up binary sensor * Mypy cleanup * Another mypy error * Reviewer feedback * Clear next_cycle sensor when the value is unknown * Reviewer feedback * Reviewer feedback * Remove assert * Restructure switches, sensors, and binary sensors * Reviewer feedback * Reviewer feedback
This commit is contained in:
parent
a3248ccff9
commit
14fcf7be8e
14 changed files with 1307 additions and 149 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from pydrawise.schema import Controller, Zone
|
||||
from pydrawise.schema import Controller, Sensor, Zone
|
||||
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.helpers.device_registry import DeviceInfo
|
||||
|
@ -24,24 +24,42 @@ class HydrawiseEntity(CoordinatorEntity[HydrawiseDataUpdateCoordinator]):
|
|||
coordinator: HydrawiseDataUpdateCoordinator,
|
||||
description: EntityDescription,
|
||||
controller: Controller,
|
||||
zone: Zone | None = None,
|
||||
*,
|
||||
zone_id: int | None = None,
|
||||
sensor_id: int | None = None,
|
||||
) -> None:
|
||||
"""Initialize the Hydrawise entity."""
|
||||
super().__init__(coordinator=coordinator)
|
||||
self.entity_description = description
|
||||
self.controller = controller
|
||||
self.zone = zone
|
||||
self._device_id = str(controller.id if zone is None else zone.id)
|
||||
self.zone_id = zone_id
|
||||
self.sensor_id = sensor_id
|
||||
self._device_id = str(zone_id) if zone_id is not None else str(controller.id)
|
||||
self._attr_unique_id = f"{self._device_id}_{description.key}"
|
||||
self._attr_device_info = DeviceInfo(
|
||||
identifiers={(DOMAIN, self._device_id)},
|
||||
name=controller.name if zone is None else zone.name,
|
||||
name=self.zone.name if zone_id is not None else controller.name,
|
||||
model="Zone"
|
||||
if zone_id is not None
|
||||
else controller.hardware.model.description,
|
||||
manufacturer=MANUFACTURER,
|
||||
)
|
||||
if zone is not None:
|
||||
if zone_id is not None or sensor_id is not None:
|
||||
self._attr_device_info["via_device"] = (DOMAIN, str(controller.id))
|
||||
self._update_attrs()
|
||||
|
||||
@property
|
||||
def zone(self) -> Zone:
|
||||
"""Return the entity zone."""
|
||||
assert self.zone_id is not None # needed for mypy
|
||||
return self.coordinator.data.zones[self.zone_id]
|
||||
|
||||
@property
|
||||
def sensor(self) -> Sensor:
|
||||
"""Return the entity sensor."""
|
||||
assert self.sensor_id is not None # needed for mypy
|
||||
return self.coordinator.data.sensors[self.sensor_id]
|
||||
|
||||
def _update_attrs(self) -> None:
|
||||
"""Update state attributes."""
|
||||
return # pragma: no cover
|
||||
|
@ -50,7 +68,5 @@ class HydrawiseEntity(CoordinatorEntity[HydrawiseDataUpdateCoordinator]):
|
|||
def _handle_coordinator_update(self) -> None:
|
||||
"""Get the latest data and updates the state."""
|
||||
self.controller = self.coordinator.data.controllers[self.controller.id]
|
||||
if self.zone:
|
||||
self.zone = self.coordinator.data.zones[self.zone.id]
|
||||
self._update_attrs()
|
||||
super()._handle_coordinator_update()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue