1 """Sensors for the Elexa Guardian integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
12 SensorEntityDescription,
18 UnitOfElectricCurrent,
19 UnitOfElectricPotential,
28 from .
import GuardianData
30 API_SYSTEM_DIAGNOSTICS,
31 API_SYSTEM_ONBOARD_SENSOR_STATUS,
35 SIGNAL_PAIRED_SENSOR_COORDINATOR_ADDED,
39 ValveControllerEntity,
40 ValveControllerEntityDescription,
43 SENSOR_KIND_AVG_CURRENT =
"average_current"
44 SENSOR_KIND_BATTERY =
"battery"
45 SENSOR_KIND_INST_CURRENT =
"instantaneous_current"
46 SENSOR_KIND_INST_CURRENT_DDT =
"instantaneous_current_ddt"
47 SENSOR_KIND_TEMPERATURE =
"temperature"
48 SENSOR_KIND_TRAVEL_COUNT =
"travel_count"
49 SENSOR_KIND_UPTIME =
"uptime"
52 @dataclass(frozen=True, kw_only=True)
54 """Describe a Guardian paired sensor."""
56 value_fn: Callable[[dict[str, Any]], StateType]
59 @dataclass(frozen=True, kw_only=True)
61 SensorEntityDescription, ValveControllerEntityDescription
63 """Describe a Guardian valve controller sensor."""
65 value_fn: Callable[[dict[str, Any]], StateType]
68 PAIRED_SENSOR_DESCRIPTIONS = (
70 key=SENSOR_KIND_BATTERY,
71 device_class=SensorDeviceClass.VOLTAGE,
72 entity_category=EntityCategory.DIAGNOSTIC,
73 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
74 value_fn=
lambda data: data[
"battery"],
77 key=SENSOR_KIND_TEMPERATURE,
78 device_class=SensorDeviceClass.TEMPERATURE,
79 native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
80 state_class=SensorStateClass.MEASUREMENT,
81 value_fn=
lambda data: data[
"temperature"],
84 VALVE_CONTROLLER_DESCRIPTIONS = (
86 key=SENSOR_KIND_AVG_CURRENT,
87 translation_key=
"current",
88 device_class=SensorDeviceClass.CURRENT,
89 entity_category=EntityCategory.DIAGNOSTIC,
90 native_unit_of_measurement=UnitOfElectricCurrent.MILLIAMPERE,
91 api_category=API_VALVE_STATUS,
92 value_fn=
lambda data: data[
"average_current"],
95 key=SENSOR_KIND_INST_CURRENT,
96 translation_key=
"instantaneous_current",
97 device_class=SensorDeviceClass.CURRENT,
98 entity_category=EntityCategory.DIAGNOSTIC,
99 native_unit_of_measurement=UnitOfElectricCurrent.MILLIAMPERE,
100 api_category=API_VALVE_STATUS,
101 value_fn=
lambda data: data[
"instantaneous_current"],
104 key=SENSOR_KIND_INST_CURRENT_DDT,
105 translation_key=
"instantaneous_current_ddt",
106 device_class=SensorDeviceClass.CURRENT,
107 entity_category=EntityCategory.DIAGNOSTIC,
108 native_unit_of_measurement=UnitOfElectricCurrent.MILLIAMPERE,
109 api_category=API_VALVE_STATUS,
110 value_fn=
lambda data: data[
"instantaneous_current_ddt"],
113 key=SENSOR_KIND_TEMPERATURE,
114 device_class=SensorDeviceClass.TEMPERATURE,
115 native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
116 state_class=SensorStateClass.MEASUREMENT,
117 api_category=API_SYSTEM_ONBOARD_SENSOR_STATUS,
118 value_fn=
lambda data: data[
"temperature"],
121 key=SENSOR_KIND_UPTIME,
122 translation_key=
"uptime",
123 entity_category=EntityCategory.DIAGNOSTIC,
124 native_unit_of_measurement=UnitOfTime.MINUTES,
125 api_category=API_SYSTEM_DIAGNOSTICS,
126 value_fn=
lambda data: data[
"uptime"],
129 key=SENSOR_KIND_TRAVEL_COUNT,
130 translation_key=
"travel_count",
131 entity_category=EntityCategory.DIAGNOSTIC,
132 native_unit_of_measurement=
"revolutions",
133 api_category=API_VALVE_STATUS,
134 value_fn=
lambda data: data[
"travel_count"],
140 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
142 """Set up Guardian switches based on a config entry."""
143 data: GuardianData = hass.data[DOMAIN][entry.entry_id]
146 def add_new_paired_sensor(uid: str) ->
None:
147 """Add a new paired sensor."""
150 entry, data.paired_sensor_manager.coordinators[uid], description
152 for description
in PAIRED_SENSOR_DESCRIPTIONS
156 entry.async_on_unload(
159 SIGNAL_PAIRED_SENSOR_COORDINATOR_ADDED.format(entry.data[CONF_UID]),
160 add_new_paired_sensor,
165 sensors: list[PairedSensorSensor | ValveControllerSensor] = [
167 for description
in VALVE_CONTROLLER_DESCRIPTIONS
174 for coordinator
in data.paired_sensor_manager.coordinators.values()
175 for description
in PAIRED_SENSOR_DESCRIPTIONS
183 """Define a binary sensor related to a Guardian valve controller."""
185 entity_description: PairedSensorDescription
189 """Return the value reported by the sensor."""
194 """Define a generic Guardian sensor."""
196 entity_description: ValveControllerSensorDescription
200 """Return the value reported by the sensor."""
StateType native_value(self)
StateType native_value(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)