diff --git a/homeassistant/components/rachio/binary_sensor.py b/homeassistant/components/rachio/binary_sensor.py index eb7a84867ab..e6248b2c93b 100644 --- a/homeassistant/components/rachio/binary_sensor.py +++ b/homeassistant/components/rachio/binary_sensor.py @@ -2,6 +2,7 @@ from abc import abstractmethod import logging +from typing import Any from homeassistant.components.binary_sensor import ( BinarySensorDeviceClass, @@ -15,16 +16,21 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from .const import ( DOMAIN as DOMAIN_RACHIO, + KEY_BATTERY_STATUS, KEY_DEVICE_ID, + KEY_LOW, KEY_RAIN_SENSOR_TRIPPED, + KEY_REPORTED_STATE, + KEY_STATE, KEY_STATUS, KEY_SUBTYPE, SIGNAL_RACHIO_CONTROLLER_UPDATE, SIGNAL_RACHIO_RAIN_SENSOR_UPDATE, STATUS_ONLINE, ) +from .coordinator import RachioUpdateCoordinator from .device import RachioPerson -from .entity import RachioDevice +from .entity import RachioDevice, RachioHoseTimerEntity from .webhooks import ( SUBTYPE_COLD_REBOOT, SUBTYPE_OFFLINE, @@ -52,6 +58,11 @@ def _create_entities(hass: HomeAssistant, config_entry: ConfigEntry) -> list[Ent for controller in person.controllers: entities.append(RachioControllerOnlineBinarySensor(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 @@ -140,3 +151,24 @@ class RachioRainSensor(RachioControllerBinarySensor): 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 diff --git a/homeassistant/components/rachio/const.py b/homeassistant/components/rachio/const.py index 22c92be2b74..b9b16c0cd87 100644 --- a/homeassistant/components/rachio/const.py +++ b/homeassistant/components/rachio/const.py @@ -57,6 +57,7 @@ KEY_CONNECTED = "connected" KEY_CURRENT_STATUS = "lastWateringAction" KEY_DETECT_FLOW = "detectFlow" KEY_BATTERY_STATUS = "batteryStatus" +KEY_LOW = "LOW" KEY_REASON = "reason" KEY_DEFAULT_RUNTIME = "defaultRuntimeSeconds" KEY_DURATION_SECONDS = "durationSeconds" diff --git a/homeassistant/components/rachio/entity.py b/homeassistant/components/rachio/entity.py index 27564f1caca..056abe9145b 100644 --- a/homeassistant/components/rachio/entity.py +++ b/homeassistant/components/rachio/entity.py @@ -70,6 +70,7 @@ class RachioHoseTimerEntity(CoordinatorEntity[RachioUpdateCoordinator]): manufacturer=DEFAULT_NAME, configuration_url="https://app.rach.io", ) + self._update_attr() @property def available(self) -> bool: diff --git a/homeassistant/components/rachio/switch.py b/homeassistant/components/rachio/switch.py index 0f696baad3a..1a8dbe42904 100644 --- a/homeassistant/components/rachio/switch.py +++ b/homeassistant/components/rachio/switch.py @@ -548,8 +548,6 @@ class RachioValve(RachioHoseTimerEntity, SwitchEntity): self._person = person self._base = base 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: """Turn on this valve."""