From dc10f3c204e0e94e958f3b71c0fcb1caab12e1ce Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 11 Jan 2024 19:16:54 -0700 Subject: [PATCH] Move Guardian valve attributes to diagnostics sensors (#107834) --- homeassistant/components/guardian/sensor.py | 42 +++++++++++++++++++ .../components/guardian/strings.json | 12 ++++++ homeassistant/components/guardian/valve.py | 21 +--------- 3 files changed, 55 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/guardian/sensor.py b/homeassistant/components/guardian/sensor.py index 85adaddb7f2..64c70b07b83 100644 --- a/homeassistant/components/guardian/sensor.py +++ b/homeassistant/components/guardian/sensor.py @@ -14,6 +14,7 @@ from homeassistant.components.sensor import ( from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( EntityCategory, + UnitOfElectricCurrent, UnitOfElectricPotential, UnitOfTemperature, UnitOfTime, @@ -32,13 +33,18 @@ from . import ( from .const import ( API_SYSTEM_DIAGNOSTICS, API_SYSTEM_ONBOARD_SENSOR_STATUS, + API_VALVE_STATUS, CONF_UID, DOMAIN, SIGNAL_PAIRED_SENSOR_COORDINATOR_ADDED, ) +SENSOR_KIND_AVG_CURRENT = "average_current" SENSOR_KIND_BATTERY = "battery" +SENSOR_KIND_INST_CURRENT = "instantaneous_current" +SENSOR_KIND_INST_CURRENT_DDT = "instantaneous_current_ddt" SENSOR_KIND_TEMPERATURE = "temperature" +SENSOR_KIND_TRAVEL_COUNT = "travel_count" SENSOR_KIND_UPTIME = "uptime" @@ -75,6 +81,33 @@ PAIRED_SENSOR_DESCRIPTIONS = ( ), ) VALVE_CONTROLLER_DESCRIPTIONS = ( + ValveControllerSensorDescription( + key=SENSOR_KIND_AVG_CURRENT, + translation_key="current", + device_class=SensorDeviceClass.CURRENT, + entity_category=EntityCategory.DIAGNOSTIC, + native_unit_of_measurement=UnitOfElectricCurrent.MILLIAMPERE, + api_category=API_VALVE_STATUS, + value_fn=lambda data: data["average_current"], + ), + ValveControllerSensorDescription( + key=SENSOR_KIND_INST_CURRENT, + translation_key="instantaneous_current", + device_class=SensorDeviceClass.CURRENT, + entity_category=EntityCategory.DIAGNOSTIC, + native_unit_of_measurement=UnitOfElectricCurrent.MILLIAMPERE, + api_category=API_VALVE_STATUS, + value_fn=lambda data: data["instantaneous_current"], + ), + ValveControllerSensorDescription( + key=SENSOR_KIND_INST_CURRENT_DDT, + translation_key="instantaneous_current_ddt", + device_class=SensorDeviceClass.CURRENT, + entity_category=EntityCategory.DIAGNOSTIC, + native_unit_of_measurement=UnitOfElectricCurrent.MILLIAMPERE, + api_category=API_VALVE_STATUS, + value_fn=lambda data: data["instantaneous_current_ddt"], + ), ValveControllerSensorDescription( key=SENSOR_KIND_TEMPERATURE, device_class=SensorDeviceClass.TEMPERATURE, @@ -92,6 +125,15 @@ VALVE_CONTROLLER_DESCRIPTIONS = ( api_category=API_SYSTEM_DIAGNOSTICS, value_fn=lambda data: data["uptime"], ), + ValveControllerSensorDescription( + key=SENSOR_KIND_TRAVEL_COUNT, + translation_key="travel_count", + icon="mdi:counter", + entity_category=EntityCategory.DIAGNOSTIC, + native_unit_of_measurement="revolutions", + api_category=API_VALVE_STATUS, + value_fn=lambda data: data["travel_count"], + ), ) diff --git a/homeassistant/components/guardian/strings.json b/homeassistant/components/guardian/strings.json index c426f4f8081..e8622fe9d03 100644 --- a/homeassistant/components/guardian/strings.json +++ b/homeassistant/components/guardian/strings.json @@ -33,6 +33,18 @@ } }, "sensor": { + "current": { + "name": "Current" + }, + "instantaneous_current": { + "name": "Instantaneous current" + }, + "instantaneous_current_ddt": { + "name": "Instantaneous current (DDT)" + }, + "travel_count": { + "name": "Travel count" + }, "uptime": { "name": "Uptime" } diff --git a/homeassistant/components/guardian/valve.py b/homeassistant/components/guardian/valve.py index 94f5ddbee6a..a2b6b5b6ab7 100644 --- a/homeassistant/components/guardian/valve.py +++ b/homeassistant/components/guardian/valve.py @@ -1,7 +1,7 @@ """Valves for the Elexa Guardian integration.""" from __future__ import annotations -from collections.abc import Callable, Coroutine, Mapping +from collections.abc import Callable, Coroutine from dataclasses import dataclass from enum import StrEnum from typing import Any @@ -22,13 +22,6 @@ from . import GuardianData, ValveControllerEntity, ValveControllerEntityDescript from .const import API_VALVE_STATUS, DOMAIN from .util import convert_exceptions_to_homeassistant_error -ATTR_AVG_CURRENT = "average_current" -ATTR_CONNECTED_CLIENTS = "connected_clients" -ATTR_INST_CURRENT = "instantaneous_current" -ATTR_INST_CURRENT_DDT = "instantaneous_current_ddt" -ATTR_STATION_CONNECTED = "station_connected" -ATTR_TRAVEL_COUNT = "travel_count" - VALVE_KIND_VALVE = "valve" @@ -51,7 +44,6 @@ class ValveControllerValveDescription( ): """Describe a Guardian valve controller valve.""" - extra_state_attributes_fn: Callable[[dict[str, Any]], Mapping[str, Any]] is_closed_fn: Callable[[dict[str, Any]], bool] is_closing_fn: Callable[[dict[str, Any]], bool] is_opening_fn: Callable[[dict[str, Any]], bool] @@ -104,12 +96,6 @@ VALVE_CONTROLLER_DESCRIPTIONS = ( translation_key="valve_controller", device_class=ValveDeviceClass.WATER, api_category=API_VALVE_STATUS, - extra_state_attributes_fn=lambda data: { - ATTR_AVG_CURRENT: data["average_current"], - ATTR_INST_CURRENT: data["instantaneous_current"], - ATTR_INST_CURRENT_DDT: data["instantaneous_current_ddt"], - ATTR_TRAVEL_COUNT: data["travel_count"], - }, is_closed_fn=lambda data: data["state"] == GuardianValveState.CLOSED, is_closing_fn=is_closing, is_opening_fn=is_opening, @@ -151,11 +137,6 @@ class ValveControllerValve(ValveControllerEntity, ValveEntity): self._client = data.client - @property - def extra_state_attributes(self) -> Mapping[str, Any] | None: - """Return entity specific state attributes.""" - return self.entity_description.extra_state_attributes_fn(self.coordinator.data) - @property def is_closing(self) -> bool: """Return if the valve is closing or not."""