1 """Definition and setup of the Omnilogic Sensors for Home Assistant."""
8 CONCENTRATION_PARTS_PER_MILLION,
10 UnitOfElectricPotential,
18 from .common
import check_guard
19 from .const
import COORDINATOR, DEFAULT_PH_OFFSET, DOMAIN, PUMP_TYPES
20 from .coordinator
import OmniLogicUpdateCoordinator
21 from .entity
import OmniLogicEntity
25 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
27 """Set up the sensor platform."""
29 coordinator: OmniLogicUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
34 for item_id, item
in coordinator.data.items():
36 item_kind = item_id[-2]
37 entity_settings = SENSOR_TYPES.get((id_len, item_kind))
39 if not entity_settings:
42 for entity_setting
in entity_settings:
43 entity_classes: dict[str, type] = entity_setting[
"entity_classes"]
44 for state_key, entity_class
in entity_classes.items():
48 entity = entity_class(
49 coordinator=coordinator,
51 name=entity_setting[
"name"],
52 kind=entity_setting[
"kind"],
54 device_class=entity_setting[
"device_class"],
55 icon=entity_setting[
"icon"],
56 unit=entity_setting[
"unit"],
59 entities.append(entity)
65 """Defines an Omnilogic sensor entity."""
69 coordinator: OmniLogicUpdateCoordinator,
72 device_class: SensorDeviceClass |
None,
78 """Initialize Entities."""
80 coordinator=coordinator,
87 backyard_id = item_id[:2]
88 unit_type = coordinator.data[backyard_id].
get(
"Unit-of-Measurement")
97 """Define an OmniLogic Temperature (Air/Water) Sensor."""
101 """Return the state for the temperature sensor."""
104 hayward_state = sensor_data
105 hayward_unit_of_measure = UnitOfTemperature.FAHRENHEIT
109 hayward_state = round((
int(hayward_state) - 32) * 5 / 9, 1)
110 hayward_unit_of_measure = UnitOfTemperature.CELSIUS
112 if int(sensor_data) == -1:
116 self._attrs[
"hayward_temperature"] = hayward_state
117 self._attrs[
"hayward_unit_of_measure"] = hayward_unit_of_measure
125 """Define an OmniLogic Pump Speed Sensor."""
129 """Return the state for the pump speed sensor."""
131 pump_type = PUMP_TYPES[
133 "Filter-Type", self.coordinator.data[self.
_item_id_item_id].
get(
"Type", {})
138 if pump_type ==
"VARIABLE":
141 elif pump_type ==
"DUAL":
145 elif pump_speed == self.coordinator.data[self.
_item_id_item_id].
get(
149 elif pump_speed == self.coordinator.data[self.
_item_id_item_id].
get(
154 self._attrs[
"pump_type"] = pump_type
160 """Define an OmniLogic Salt Level Sensor."""
164 """Return the state for the salt level sensor."""
169 salt_return = round(
int(salt_return) / 1000, 2)
171 f
"{UnitOfMass.GRAMS}/{UnitOfVolume.LITERS}"
178 """Define an OmniLogic Chlorinator Sensor."""
182 """Return the state for the chlorinator sensor."""
187 """Define an OmniLogic pH Sensor."""
191 """Return the state for the pH sensor."""
199 self.coordinator.config_entry.options.get(
200 "ph_offset", DEFAULT_PH_OFFSET
208 """Define an OmniLogic ORP Sensor."""
212 coordinator: OmniLogicUpdateCoordinator,
217 device_class: SensorDeviceClass |
None,
221 """Initialize the sensor."""
223 coordinator=coordinator,
226 device_class=device_class,
235 """Return the state for the ORP sensor."""
245 SENSOR_TYPES: dict[tuple[int, str], list[dict[str, Any]]] = {
248 "entity_classes": {
"airTemp": OmniLogicTemperatureSensor},
249 "name":
"Air Temperature",
250 "kind":
"air_temperature",
251 "device_class": SensorDeviceClass.TEMPERATURE,
253 "unit": UnitOfTemperature.FAHRENHEIT,
254 "guard_condition": [{}],
259 "entity_classes": {
"waterTemp": OmniLogicTemperatureSensor},
260 "name":
"Water Temperature",
261 "kind":
"water_temperature",
262 "device_class": SensorDeviceClass.TEMPERATURE,
264 "unit": UnitOfTemperature.FAHRENHEIT,
265 "guard_condition": [{}],
270 "entity_classes": {
"filterSpeed": OmniLogicPumpSpeedSensor},
272 "kind":
"filter_pump_speed",
273 "device_class":
None,
274 "icon":
"mdi:speedometer",
277 {
"Filter-Type":
"FMT_SINGLE_SPEED"},
283 "entity_classes": {
"pumpSpeed": OmniLogicPumpSpeedSensor},
284 "name":
"Pump Speed",
285 "kind":
"pump_speed",
286 "device_class":
None,
287 "icon":
"mdi:speedometer",
290 {
"Type":
"PMP_SINGLE_SPEED"},
294 (6,
"Chlorinator"): [
296 "entity_classes": {
"Timed-Percent": OmniLogicChlorinatorSensor},
298 "kind":
"chlorinator",
299 "device_class":
None,
304 "Shared-Type":
"BOW_SHARED_EQUIPMENT",
308 "operatingMode":
"2",
313 "entity_classes": {
"avgSaltLevel": OmniLogicSaltLevelSensor},
314 "name":
"Salt Level",
315 "kind":
"salt_level",
316 "device_class":
None,
318 "unit": CONCENTRATION_PARTS_PER_MILLION,
321 "Shared-Type":
"BOW_SHARED_EQUIPMENT",
329 "entity_classes": {
"ph": OmniLogicPHSensor},
332 "device_class":
None,
340 "entity_classes": {
"orp": OmniLogicORPSensor},
343 "device_class":
None,
345 "unit": UnitOfElectricPotential.MILLIVOLT,
None __init__(self, OmniLogicUpdateCoordinator coordinator, str state_key, str name, str kind, tuple item_id, SensorDeviceClass|None device_class, str icon, str unit)
_attr_native_unit_of_measurement
_attr_native_unit_of_measurement
_attr_native_unit_of_measurement
None __init__(self, OmniLogicUpdateCoordinator coordinator, str kind, str name, SensorDeviceClass|None device_class, str icon, str unit, tuple item_id, str state_key)
_attr_native_unit_of_measurement
web.Response get(self, web.Request request, str config_key)
def check_guard(state_key, item, entity_setting)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)