mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 17:57:11 +00:00
Add battery binary sensor to Rachio hose timer (#115810)
Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
parent
d48bd9b016
commit
3a461c32ac
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
from abc import abstractmethod
|
from abc import abstractmethod
|
||||||
import logging
|
import logging
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from homeassistant.components.binary_sensor import (
|
from homeassistant.components.binary_sensor import (
|
||||||
BinarySensorDeviceClass,
|
BinarySensorDeviceClass,
|
||||||
@ -15,16 +16,21 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
|||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
DOMAIN as DOMAIN_RACHIO,
|
DOMAIN as DOMAIN_RACHIO,
|
||||||
|
KEY_BATTERY_STATUS,
|
||||||
KEY_DEVICE_ID,
|
KEY_DEVICE_ID,
|
||||||
|
KEY_LOW,
|
||||||
KEY_RAIN_SENSOR_TRIPPED,
|
KEY_RAIN_SENSOR_TRIPPED,
|
||||||
|
KEY_REPORTED_STATE,
|
||||||
|
KEY_STATE,
|
||||||
KEY_STATUS,
|
KEY_STATUS,
|
||||||
KEY_SUBTYPE,
|
KEY_SUBTYPE,
|
||||||
SIGNAL_RACHIO_CONTROLLER_UPDATE,
|
SIGNAL_RACHIO_CONTROLLER_UPDATE,
|
||||||
SIGNAL_RACHIO_RAIN_SENSOR_UPDATE,
|
SIGNAL_RACHIO_RAIN_SENSOR_UPDATE,
|
||||||
STATUS_ONLINE,
|
STATUS_ONLINE,
|
||||||
)
|
)
|
||||||
|
from .coordinator import RachioUpdateCoordinator
|
||||||
from .device import RachioPerson
|
from .device import RachioPerson
|
||||||
from .entity import RachioDevice
|
from .entity import RachioDevice, RachioHoseTimerEntity
|
||||||
from .webhooks import (
|
from .webhooks import (
|
||||||
SUBTYPE_COLD_REBOOT,
|
SUBTYPE_COLD_REBOOT,
|
||||||
SUBTYPE_OFFLINE,
|
SUBTYPE_OFFLINE,
|
||||||
@ -52,6 +58,11 @@ def _create_entities(hass: HomeAssistant, config_entry: ConfigEntry) -> list[Ent
|
|||||||
for controller in person.controllers:
|
for controller in person.controllers:
|
||||||
entities.append(RachioControllerOnlineBinarySensor(controller))
|
entities.append(RachioControllerOnlineBinarySensor(controller))
|
||||||
entities.append(RachioRainSensor(controller))
|
entities.append(RachioRainSensor(controller))
|
||||||
|
entities.extend(
|
||||||
|
RachioHoseTimerBattery(valve, base_station.coordinator)
|
||||||
|
for base_station in person.base_stations
|
||||||
|
for valve in base_station.coordinator.data.values()
|
||||||
|
)
|
||||||
return entities
|
return entities
|
||||||
|
|
||||||
|
|
||||||
@ -140,3 +151,24 @@ class RachioRainSensor(RachioControllerBinarySensor):
|
|||||||
self._async_handle_any_update,
|
self._async_handle_any_update,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class RachioHoseTimerBattery(RachioHoseTimerEntity, BinarySensorEntity):
|
||||||
|
"""Represents a battery sensor for a smart hose timer."""
|
||||||
|
|
||||||
|
_attr_device_class = BinarySensorDeviceClass.BATTERY
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, data: dict[str, Any], coordinator: RachioUpdateCoordinator
|
||||||
|
) -> None:
|
||||||
|
"""Initialize a smart hose timer battery sensor."""
|
||||||
|
super().__init__(data, coordinator)
|
||||||
|
self._attr_unique_id = f"{self.id}-battery"
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def _update_attr(self) -> None:
|
||||||
|
"""Handle updated coordinator data."""
|
||||||
|
data = self.coordinator.data[self.id]
|
||||||
|
|
||||||
|
self._static_attrs = data[KEY_STATE][KEY_REPORTED_STATE]
|
||||||
|
self._attr_is_on = self._static_attrs[KEY_BATTERY_STATUS] == KEY_LOW
|
||||||
|
@ -57,6 +57,7 @@ KEY_CONNECTED = "connected"
|
|||||||
KEY_CURRENT_STATUS = "lastWateringAction"
|
KEY_CURRENT_STATUS = "lastWateringAction"
|
||||||
KEY_DETECT_FLOW = "detectFlow"
|
KEY_DETECT_FLOW = "detectFlow"
|
||||||
KEY_BATTERY_STATUS = "batteryStatus"
|
KEY_BATTERY_STATUS = "batteryStatus"
|
||||||
|
KEY_LOW = "LOW"
|
||||||
KEY_REASON = "reason"
|
KEY_REASON = "reason"
|
||||||
KEY_DEFAULT_RUNTIME = "defaultRuntimeSeconds"
|
KEY_DEFAULT_RUNTIME = "defaultRuntimeSeconds"
|
||||||
KEY_DURATION_SECONDS = "durationSeconds"
|
KEY_DURATION_SECONDS = "durationSeconds"
|
||||||
|
@ -70,6 +70,7 @@ class RachioHoseTimerEntity(CoordinatorEntity[RachioUpdateCoordinator]):
|
|||||||
manufacturer=DEFAULT_NAME,
|
manufacturer=DEFAULT_NAME,
|
||||||
configuration_url="https://app.rach.io",
|
configuration_url="https://app.rach.io",
|
||||||
)
|
)
|
||||||
|
self._update_attr()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def available(self) -> bool:
|
def available(self) -> bool:
|
||||||
|
@ -548,8 +548,6 @@ class RachioValve(RachioHoseTimerEntity, SwitchEntity):
|
|||||||
self._person = person
|
self._person = person
|
||||||
self._base = base
|
self._base = base
|
||||||
self._attr_unique_id = f"{self.id}-valve"
|
self._attr_unique_id = f"{self.id}-valve"
|
||||||
self._static_attrs = data[KEY_STATE][KEY_REPORTED_STATE]
|
|
||||||
self._attr_is_on = KEY_CURRENT_STATUS in self._static_attrs
|
|
||||||
|
|
||||||
def turn_on(self, **kwargs: Any) -> None:
|
def turn_on(self, **kwargs: Any) -> None:
|
||||||
"""Turn on this valve."""
|
"""Turn on this valve."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user