Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Freedompro sensor."""
2 
3 from typing import Any
4 
6  SensorDeviceClass,
7  SensorEntity,
8  SensorStateClass,
9 )
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import LIGHT_LUX, PERCENTAGE, UnitOfTemperature
12 from homeassistant.core import HomeAssistant, callback
13 from homeassistant.helpers.device_registry import DeviceInfo
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 from homeassistant.helpers.update_coordinator import CoordinatorEntity
16 
17 from .const import DOMAIN
18 from .coordinator import FreedomproDataUpdateCoordinator
19 
20 DEVICE_CLASS_MAP = {
21  "temperatureSensor": SensorDeviceClass.TEMPERATURE,
22  "humiditySensor": SensorDeviceClass.HUMIDITY,
23  "lightSensor": SensorDeviceClass.ILLUMINANCE,
24 }
25 STATE_CLASS_MAP = {
26  "temperatureSensor": SensorStateClass.MEASUREMENT,
27  "humiditySensor": SensorStateClass.MEASUREMENT,
28  "lightSensor": None,
29 }
30 UNIT_MAP = {
31  "temperatureSensor": UnitOfTemperature.CELSIUS,
32  "humiditySensor": PERCENTAGE,
33  "lightSensor": LIGHT_LUX,
34 }
35 DEVICE_KEY_MAP = {
36  "temperatureSensor": "currentTemperature",
37  "humiditySensor": "currentRelativeHumidity",
38  "lightSensor": "currentAmbientLightLevel",
39 }
40 SUPPORTED_SENSORS = {"temperatureSensor", "humiditySensor", "lightSensor"}
41 
42 
44  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
45 ) -> None:
46  """Set up Freedompro sensor."""
47  coordinator: FreedomproDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
49  Device(device, coordinator)
50  for device in coordinator.data
51  if device["type"] in SUPPORTED_SENSORS
52  )
53 
54 
55 class Device(CoordinatorEntity[FreedomproDataUpdateCoordinator], SensorEntity):
56  """Representation of a Freedompro sensor."""
57 
58  _attr_has_entity_name = True
59  _attr_name = None
60 
61  def __init__(
62  self, device: dict[str, Any], coordinator: FreedomproDataUpdateCoordinator
63  ) -> None:
64  """Initialize the Freedompro sensor."""
65  super().__init__(coordinator)
66  self._attr_unique_id_attr_unique_id = device["uid"]
67  self._type_type = device["type"]
68  self._attr_device_info_attr_device_info = DeviceInfo(
69  identifiers={
70  (DOMAIN, device["uid"]),
71  },
72  manufacturer="Freedompro",
73  model=device["type"],
74  name=device["name"],
75  )
76  self._attr_device_class_attr_device_class = DEVICE_CLASS_MAP[device["type"]]
77  self._attr_state_class_attr_state_class = STATE_CLASS_MAP[device["type"]]
78  self._attr_native_unit_of_measurement_attr_native_unit_of_measurement = UNIT_MAP[device["type"]]
79  self._attr_native_value_attr_native_value = 0
80 
81  @callback
82  def _handle_coordinator_update(self) -> None:
83  """Handle updated data from the coordinator."""
84  device = next(
85  (
86  device
87  for device in self.coordinator.data
88  if device["uid"] == self.unique_idunique_id
89  ),
90  None,
91  )
92  if device is not None and "state" in device:
93  state = device["state"]
94  self._attr_native_value_attr_native_value = state[DEVICE_KEY_MAP[self._type_type]]
96 
97  async def async_added_to_hass(self) -> None:
98  """When entity is added to hass."""
99  await super().async_added_to_hass()
100  self._handle_coordinator_update_handle_coordinator_update()
None __init__(self, dict[str, Any] device, FreedomproDataUpdateCoordinator coordinator)
Definition: sensor.py:63
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:45