Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Platform for sensor integration."""
2 
3 from __future__ import annotations
4 
6  SensorDeviceClass,
7  SensorEntity,
8  SensorEntityDescription,
9  SensorStateClass,
10 )
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import (
13  CONCENTRATION_PARTS_PER_MILLION,
14  PERCENTAGE,
15  UnitOfElectricPotential,
16  UnitOfTemperature,
17 )
18 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.device_registry import DeviceInfo
20 from homeassistant.helpers.entity_platform import AddEntitiesCallback
21 from homeassistant.helpers.typing import StateType
22 from homeassistant.helpers.update_coordinator import CoordinatorEntity
23 
24 from .const import DOMAIN
25 from .coordinator import OndiloIcoCoordinator, OndiloIcoData
26 
27 SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
29  key="temperature",
30  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
31  device_class=SensorDeviceClass.TEMPERATURE,
32  state_class=SensorStateClass.MEASUREMENT,
33  ),
35  key="orp",
36  translation_key="oxydo_reduction_potential",
37  native_unit_of_measurement=UnitOfElectricPotential.MILLIVOLT,
38  state_class=SensorStateClass.MEASUREMENT,
39  ),
41  key="ph",
42  device_class=SensorDeviceClass.PH,
43  state_class=SensorStateClass.MEASUREMENT,
44  ),
46  key="tds",
47  translation_key="tds",
48  native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
49  state_class=SensorStateClass.MEASUREMENT,
50  ),
52  key="battery",
53  native_unit_of_measurement=PERCENTAGE,
54  device_class=SensorDeviceClass.BATTERY,
55  state_class=SensorStateClass.MEASUREMENT,
56  ),
58  key="rssi",
59  translation_key="rssi",
60  native_unit_of_measurement=PERCENTAGE,
61  state_class=SensorStateClass.MEASUREMENT,
62  ),
64  key="salt",
65  translation_key="salt",
66  native_unit_of_measurement="mg/L",
67  state_class=SensorStateClass.MEASUREMENT,
68  ),
69 )
70 
71 
73  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
74 ) -> None:
75  """Set up the Ondilo ICO sensors."""
76 
77  coordinator: OndiloIcoCoordinator = hass.data[DOMAIN][entry.entry_id]
78 
80  OndiloICO(coordinator, pool_id, description)
81  for pool_id, pool in coordinator.data.items()
82  for description in SENSOR_TYPES
83  if description.key in pool.sensors
84  )
85 
86 
87 class OndiloICO(CoordinatorEntity[OndiloIcoCoordinator], SensorEntity):
88  """Representation of a Sensor."""
89 
90  _attr_has_entity_name = True
91 
92  def __init__(
93  self,
94  coordinator: OndiloIcoCoordinator,
95  pool_id: str,
96  description: SensorEntityDescription,
97  ) -> None:
98  """Initialize sensor entity with data from coordinator."""
99  super().__init__(coordinator)
100  self.entity_descriptionentity_description = description
101 
102  self._pool_id_pool_id = pool_id
103 
104  data = self.pool_datapool_data
105  self._attr_unique_id_attr_unique_id = f"{data.ico['serial_number']}-{description.key}"
106  self._attr_device_info_attr_device_info = DeviceInfo(
107  identifiers={(DOMAIN, data.ico["serial_number"])},
108  manufacturer="Ondilo",
109  model="ICO",
110  name=data.pool["name"],
111  sw_version=data.ico["sw_version"],
112  )
113 
114  @property
115  def pool_data(self) -> OndiloIcoData:
116  """Get pool data."""
117  return self.coordinator.data[self._pool_id_pool_id]
118 
119  @property
120  def native_value(self) -> StateType:
121  """Last value of the sensor."""
122  return self.pool_datapool_data.sensors[self.entity_descriptionentity_description.key]
None __init__(self, OndiloIcoCoordinator coordinator, str pool_id, SensorEntityDescription description)
Definition: sensor.py:97
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:74