Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Abode Security System sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from typing import cast
8 
9 from jaraco.abode.devices.sensor import Sensor
10 
12  SensorDeviceClass,
13  SensorEntity,
14  SensorEntityDescription,
15 )
16 from homeassistant.config_entries import ConfigEntry
17 from homeassistant.const import LIGHT_LUX, PERCENTAGE, UnitOfTemperature
18 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 
21 from . import AbodeSystem
22 from .const import DOMAIN
23 from .entity import AbodeDevice
24 
25 ABODE_TEMPERATURE_UNIT_HA_UNIT = {
26  "°F": UnitOfTemperature.FAHRENHEIT,
27  "°C": UnitOfTemperature.CELSIUS,
28 }
29 
30 
31 @dataclass(frozen=True, kw_only=True)
33  """Class describing Abode sensor entities."""
34 
35  value_fn: Callable[[Sensor], float]
36  native_unit_of_measurement_fn: Callable[[Sensor], str]
37 
38 
39 SENSOR_TYPES: tuple[AbodeSensorDescription, ...] = (
41  key="temperature",
42  device_class=SensorDeviceClass.TEMPERATURE,
43  native_unit_of_measurement_fn=lambda device: ABODE_TEMPERATURE_UNIT_HA_UNIT[
44  device.temp_unit
45  ],
46  value_fn=lambda device: cast(float, device.temp),
47  ),
49  key="humidity",
50  device_class=SensorDeviceClass.HUMIDITY,
51  native_unit_of_measurement_fn=lambda _: PERCENTAGE,
52  value_fn=lambda device: cast(float, device.humidity),
53  ),
55  key="lux",
56  device_class=SensorDeviceClass.ILLUMINANCE,
57  native_unit_of_measurement_fn=lambda _: LIGHT_LUX,
58  value_fn=lambda device: cast(float, device.lux),
59  ),
60 )
61 
62 
64  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
65 ) -> None:
66  """Set up Abode sensor devices."""
67  data: AbodeSystem = hass.data[DOMAIN]
68 
70  AbodeSensor(data, device, description)
71  for description in SENSOR_TYPES
72  for device in data.abode.get_devices(generic_type="sensor")
73  if description.key in device.get_value("statuses")
74  )
75 
76 
78  """A sensor implementation for Abode devices."""
79 
80  entity_description: AbodeSensorDescription
81  _device: Sensor
82 
83  def __init__(
84  self,
85  data: AbodeSystem,
86  device: Sensor,
87  description: AbodeSensorDescription,
88  ) -> None:
89  """Initialize a sensor for an Abode device."""
90  super().__init__(data, device)
91  self.entity_descriptionentity_description = description
92  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{device.uuid}-{description.key}"
93 
94  @property
95  def native_value(self) -> float:
96  """Return the state of the sensor."""
97  return self.entity_descriptionentity_description.value_fn(self._device_device)
98 
99  @property
100  def native_unit_of_measurement(self) -> str:
101  """Return the native unit of measurement."""
102  return self.entity_descriptionentity_description.native_unit_of_measurement_fn(self._device_device)
None __init__(self, AbodeSystem data, Sensor device, AbodeSensorDescription description)
Definition: sensor.py:88
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:65