1 """Support for AquaLogic sensors."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
7 import voluptuous
as vol
10 PLATFORM_SCHEMA
as SENSOR_PLATFORM_SCHEMA,
13 SensorEntityDescription,
16 CONF_MONITORED_CONDITIONS,
27 from .
import DOMAIN, UPDATE_TOPIC, AquaLogicProcessor
30 @dataclass(frozen=True)
32 """Describes AquaLogic sensor entity."""
34 unit_metric: str |
None =
None
35 unit_imperial: str |
None =
None
39 SENSOR_TYPES: tuple[AquaLogicSensorEntityDescription, ...] = (
42 name=
"Air Temperature",
43 unit_metric=UnitOfTemperature.CELSIUS,
44 unit_imperial=UnitOfTemperature.FAHRENHEIT,
45 device_class=SensorDeviceClass.TEMPERATURE,
49 name=
"Pool Temperature",
50 unit_metric=UnitOfTemperature.CELSIUS,
51 unit_imperial=UnitOfTemperature.FAHRENHEIT,
52 icon=
"mdi:oil-temperature",
53 device_class=SensorDeviceClass.TEMPERATURE,
57 name=
"Spa Temperature",
58 unit_metric=UnitOfTemperature.CELSIUS,
59 unit_imperial=UnitOfTemperature.FAHRENHEIT,
60 icon=
"mdi:oil-temperature",
61 device_class=SensorDeviceClass.TEMPERATURE,
64 key=
"pool_chlorinator",
65 name=
"Pool Chlorinator",
66 unit_metric=PERCENTAGE,
67 unit_imperial=PERCENTAGE,
71 key=
"spa_chlorinator",
72 name=
"Spa Chlorinator",
73 unit_metric=PERCENTAGE,
74 unit_imperial=PERCENTAGE,
87 unit_metric=PERCENTAGE,
88 unit_imperial=PERCENTAGE,
89 icon=
"mdi:speedometer",
94 unit_metric=UnitOfPower.WATT,
95 unit_imperial=UnitOfPower.WATT,
96 device_class=SensorDeviceClass.POWER,
105 SENSOR_KEYS: list[str] = [desc.key
for desc
in SENSOR_TYPES]
107 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
109 vol.Required(CONF_MONITORED_CONDITIONS, default=SENSOR_KEYS): vol.All(
110 cv.ensure_list, [vol.In(SENSOR_KEYS)]
119 async_add_entities: AddEntitiesCallback,
120 discovery_info: DiscoveryInfoType |
None =
None,
122 """Set up the sensor platform."""
123 processor: AquaLogicProcessor = hass.data[DOMAIN]
124 monitored_conditions = config[CONF_MONITORED_CONDITIONS]
128 for description
in SENSOR_TYPES
129 if description.key
in monitored_conditions
136 """Sensor implementation for the AquaLogic component."""
138 entity_description: AquaLogicSensorEntityDescription
139 _attr_should_poll =
False
143 processor: AquaLogicProcessor,
144 description: AquaLogicSensorEntityDescription,
146 """Initialize sensor."""
152 """Register callbacks."""
161 """Update callback."""
162 if (panel := self.
_processor_processor.panel)
is not None:
None async_added_to_hass(self)
None __init__(self, AquaLogicProcessor processor, AquaLogicSensorEntityDescription description)
None async_update_callback(self)
_attr_native_unit_of_measurement
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)