Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Verisure sensors."""
2 
3 from __future__ import annotations
4 
6  SensorDeviceClass,
7  SensorEntity,
8  SensorStateClass,
9 )
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import PERCENTAGE, UnitOfTemperature
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.device_registry import DeviceInfo
14 from homeassistant.helpers.entity import Entity
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 from homeassistant.helpers.update_coordinator import CoordinatorEntity
17 
18 from .const import CONF_GIID, DEVICE_TYPE_NAME, DOMAIN
19 from .coordinator import VerisureDataUpdateCoordinator
20 
21 
23  hass: HomeAssistant,
24  entry: ConfigEntry,
25  async_add_entities: AddEntitiesCallback,
26 ) -> None:
27  """Set up Verisure sensors based on a config entry."""
28  coordinator: VerisureDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
29 
30  sensors: list[Entity] = [
31  VerisureThermometer(coordinator, serial_number)
32  for serial_number, values in coordinator.data["climate"].items()
33  if "temperatureValue" in values
34  ]
35 
36  sensors.extend(
37  VerisureHygrometer(coordinator, serial_number)
38  for serial_number, values in coordinator.data["climate"].items()
39  if values.get("humidityEnabled")
40  )
41 
42  async_add_entities(sensors)
43 
44 
46  CoordinatorEntity[VerisureDataUpdateCoordinator], SensorEntity
47 ):
48  """Representation of a Verisure thermometer."""
49 
50  _attr_device_class = SensorDeviceClass.TEMPERATURE
51  _attr_has_entity_name = True
52  _attr_native_unit_of_measurement = UnitOfTemperature.CELSIUS
53  _attr_state_class = SensorStateClass.MEASUREMENT
54 
55  def __init__(
56  self, coordinator: VerisureDataUpdateCoordinator, serial_number: str
57  ) -> None:
58  """Initialize the sensor."""
59  super().__init__(coordinator)
60  self._attr_unique_id_attr_unique_id = f"{serial_number}_temperature"
61  self.serial_numberserial_number = serial_number
62 
63  @property
64  def device_info(self) -> DeviceInfo:
65  """Return device information about this entity."""
66  device_type = self.coordinator.data["climate"][self.serial_numberserial_number]["device"][
67  "gui"
68  ]["label"]
69  area = self.coordinator.data["climate"][self.serial_numberserial_number]["device"]["area"]
70  return DeviceInfo(
71  name=area,
72  manufacturer="Verisure",
73  model=DEVICE_TYPE_NAME.get(device_type, device_type),
74  identifiers={(DOMAIN, self.serial_numberserial_number)},
75  via_device=(DOMAIN, self.coordinator.entry.data[CONF_GIID]),
76  configuration_url="https://mypages.verisure.com",
77  )
78 
79  @property
80  def native_value(self) -> str | None:
81  """Return the state of the entity."""
82  return self.coordinator.data["climate"][self.serial_numberserial_number]["temperatureValue"]
83 
84  @property
85  def available(self) -> bool:
86  """Return True if entity is available."""
87  return (
88  super().available
89  and self.serial_numberserial_number in self.coordinator.data["climate"]
90  and "temperatureValue"
91  in self.coordinator.data["climate"][self.serial_numberserial_number]
92  )
93 
94 
96  CoordinatorEntity[VerisureDataUpdateCoordinator], SensorEntity
97 ):
98  """Representation of a Verisure hygrometer."""
99 
100  _attr_device_class = SensorDeviceClass.HUMIDITY
101  _attr_has_entity_name = True
102  _attr_native_unit_of_measurement = PERCENTAGE
103  _attr_state_class = SensorStateClass.MEASUREMENT
104 
105  def __init__(
106  self, coordinator: VerisureDataUpdateCoordinator, serial_number: str
107  ) -> None:
108  """Initialize the sensor."""
109  super().__init__(coordinator)
110  self._attr_unique_id_attr_unique_id = f"{serial_number}_humidity"
111  self.serial_numberserial_number = serial_number
112 
113  @property
114  def device_info(self) -> DeviceInfo:
115  """Return device information about this entity."""
116  device_type = self.coordinator.data["climate"][self.serial_numberserial_number]["device"][
117  "gui"
118  ]["label"]
119  area = self.coordinator.data["climate"][self.serial_numberserial_number]["device"]["area"]
120  return DeviceInfo(
121  name=area,
122  manufacturer="Verisure",
123  model=DEVICE_TYPE_NAME.get(device_type, device_type),
124  identifiers={(DOMAIN, self.serial_numberserial_number)},
125  via_device=(DOMAIN, self.coordinator.entry.data[CONF_GIID]),
126  configuration_url="https://mypages.verisure.com",
127  )
128 
129  @property
130  def native_value(self) -> str | None:
131  """Return the state of the entity."""
132  return self.coordinator.data["climate"][self.serial_numberserial_number]["humidityValue"]
133 
134  @property
135  def available(self) -> bool:
136  """Return True if entity is available."""
137  return (
138  super().available
139  and self.serial_numberserial_number in self.coordinator.data["climate"]
140  and "humidityValue" in self.coordinator.data["climate"][self.serial_numberserial_number]
141  )
None __init__(self, VerisureDataUpdateCoordinator coordinator, str serial_number)
Definition: sensor.py:107
None __init__(self, VerisureDataUpdateCoordinator coordinator, str serial_number)
Definition: sensor.py:57
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:26