Move Guardian valve attributes to diagnostics sensors (#107834)

This commit is contained in:
Aaron Bach 2024-01-11 19:16:54 -07:00 committed by GitHub
parent 69a8f476e8
commit dc10f3c204
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 20 deletions

View file

@ -14,6 +14,7 @@ from homeassistant.components.sensor import (
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( from homeassistant.const import (
EntityCategory, EntityCategory,
UnitOfElectricCurrent,
UnitOfElectricPotential, UnitOfElectricPotential,
UnitOfTemperature, UnitOfTemperature,
UnitOfTime, UnitOfTime,
@ -32,13 +33,18 @@ from . import (
from .const import ( from .const import (
API_SYSTEM_DIAGNOSTICS, API_SYSTEM_DIAGNOSTICS,
API_SYSTEM_ONBOARD_SENSOR_STATUS, API_SYSTEM_ONBOARD_SENSOR_STATUS,
API_VALVE_STATUS,
CONF_UID, CONF_UID,
DOMAIN, DOMAIN,
SIGNAL_PAIRED_SENSOR_COORDINATOR_ADDED, SIGNAL_PAIRED_SENSOR_COORDINATOR_ADDED,
) )
SENSOR_KIND_AVG_CURRENT = "average_current"
SENSOR_KIND_BATTERY = "battery" SENSOR_KIND_BATTERY = "battery"
SENSOR_KIND_INST_CURRENT = "instantaneous_current"
SENSOR_KIND_INST_CURRENT_DDT = "instantaneous_current_ddt"
SENSOR_KIND_TEMPERATURE = "temperature" SENSOR_KIND_TEMPERATURE = "temperature"
SENSOR_KIND_TRAVEL_COUNT = "travel_count"
SENSOR_KIND_UPTIME = "uptime" SENSOR_KIND_UPTIME = "uptime"
@ -75,6 +81,33 @@ PAIRED_SENSOR_DESCRIPTIONS = (
), ),
) )
VALVE_CONTROLLER_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( ValveControllerSensorDescription(
key=SENSOR_KIND_TEMPERATURE, key=SENSOR_KIND_TEMPERATURE,
device_class=SensorDeviceClass.TEMPERATURE, device_class=SensorDeviceClass.TEMPERATURE,
@ -92,6 +125,15 @@ VALVE_CONTROLLER_DESCRIPTIONS = (
api_category=API_SYSTEM_DIAGNOSTICS, api_category=API_SYSTEM_DIAGNOSTICS,
value_fn=lambda data: data["uptime"], 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"],
),
) )

View file

@ -33,6 +33,18 @@
} }
}, },
"sensor": { "sensor": {
"current": {
"name": "Current"
},
"instantaneous_current": {
"name": "Instantaneous current"
},
"instantaneous_current_ddt": {
"name": "Instantaneous current (DDT)"
},
"travel_count": {
"name": "Travel count"
},
"uptime": { "uptime": {
"name": "Uptime" "name": "Uptime"
} }

View file

@ -1,7 +1,7 @@
"""Valves for the Elexa Guardian integration.""" """Valves for the Elexa Guardian integration."""
from __future__ import annotations from __future__ import annotations
from collections.abc import Callable, Coroutine, Mapping from collections.abc import Callable, Coroutine
from dataclasses import dataclass from dataclasses import dataclass
from enum import StrEnum from enum import StrEnum
from typing import Any from typing import Any
@ -22,13 +22,6 @@ from . import GuardianData, ValveControllerEntity, ValveControllerEntityDescript
from .const import API_VALVE_STATUS, DOMAIN from .const import API_VALVE_STATUS, DOMAIN
from .util import convert_exceptions_to_homeassistant_error 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" VALVE_KIND_VALVE = "valve"
@ -51,7 +44,6 @@ class ValveControllerValveDescription(
): ):
"""Describe a Guardian valve controller valve.""" """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_closed_fn: Callable[[dict[str, Any]], bool]
is_closing_fn: Callable[[dict[str, Any]], bool] is_closing_fn: Callable[[dict[str, Any]], bool]
is_opening_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", translation_key="valve_controller",
device_class=ValveDeviceClass.WATER, device_class=ValveDeviceClass.WATER,
api_category=API_VALVE_STATUS, 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_closed_fn=lambda data: data["state"] == GuardianValveState.CLOSED,
is_closing_fn=is_closing, is_closing_fn=is_closing,
is_opening_fn=is_opening, is_opening_fn=is_opening,
@ -151,11 +137,6 @@ class ValveControllerValve(ValveControllerEntity, ValveEntity):
self._client = data.client 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 @property
def is_closing(self) -> bool: def is_closing(self) -> bool:
"""Return if the valve is closing or not.""" """Return if the valve is closing or not."""