Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Kaiterra Temperature ahn Humidity Sensors."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 
8  SensorDeviceClass,
9  SensorEntity,
10  SensorEntityDescription,
11 )
12 from homeassistant.const import CONF_DEVICE_ID, CONF_NAME, UnitOfTemperature
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.dispatcher import async_dispatcher_connect
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
17 
18 from .const import DISPATCHER_KAITERRA, DOMAIN
19 
20 
21 @dataclass(frozen=True, kw_only=True)
23  """Class describing Renault sensor entities."""
24 
25  suffix: str
26 
27 
28 SENSORS = [
30  suffix="Temperature",
31  key="rtemp",
32  device_class=SensorDeviceClass.TEMPERATURE,
33  ),
35  suffix="Humidity",
36  key="rhumid",
37  device_class=SensorDeviceClass.HUMIDITY,
38  ),
39 ]
40 
41 
43  hass: HomeAssistant,
44  config: ConfigType,
45  async_add_entities: AddEntitiesCallback,
46  discovery_info: DiscoveryInfoType | None = None,
47 ) -> None:
48  """Set up the kaiterra temperature and humidity sensor."""
49  if discovery_info is None:
50  return
51 
52  api = hass.data[DOMAIN]
53  name = discovery_info[CONF_NAME]
54  device_id = discovery_info[CONF_DEVICE_ID]
55 
57  [KaiterraSensor(api, name, device_id, description) for description in SENSORS]
58  )
59 
60 
62  """Implementation of a Kaittera sensor."""
63 
64  _attr_should_poll = False
65 
66  def __init__(
67  self, api, name, device_id, description: KaiterraSensorEntityDescription
68  ) -> None:
69  """Initialize the sensor."""
70  self._api_api = api
71  self._device_id_device_id = device_id
72  self.entity_descriptionentity_description = description
73  self._attr_name_attr_name = f"{name} {description.suffix}"
74  self._attr_unique_id_attr_unique_id = f"{device_id}_{description.suffix.lower()}"
75 
76  @property
77  def _sensor(self):
78  """Return the sensor data."""
79  return self._api_api.data.get(self._device_id_device_id, {}).get(
80  self.entity_descriptionentity_description.key, {}
81  )
82 
83  @property
84  def available(self) -> bool:
85  """Return the availability of the sensor."""
86  return self._api_api.data.get(self._device_id_device_id) is not None
87 
88  @property
89  def native_value(self):
90  """Return the state."""
91  return self._sensor_sensor.get("value")
92 
93  @property
95  """Return the unit the value is expressed in."""
96  if not self._sensor_sensor.get("units"):
97  return None
98 
99  value = self._sensor_sensor["units"].value
100 
101  if value == "F":
102  return UnitOfTemperature.FAHRENHEIT
103  if value == "C":
104  return UnitOfTemperature.CELSIUS
105  return value
106 
107  async def async_added_to_hass(self) -> None:
108  """Register callback."""
109  self.async_on_removeasync_on_remove(
111  self.hasshass, DISPATCHER_KAITERRA, self.async_write_ha_stateasync_write_ha_state
112  )
113  )
None __init__(self, api, name, device_id, KaiterraSensorEntityDescription description)
Definition: sensor.py:68
None async_on_remove(self, CALLBACK_TYPE func)
Definition: entity.py:1331
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:47
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103