Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Stookwijzer Sensor."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from stookwijzer import Stookwijzer
9 
11  SensorDeviceClass,
12  SensorEntity,
13  SensorEntityDescription,
14  SensorStateClass,
15 )
16 from homeassistant.const import UnitOfSpeed
17 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 from homeassistant.helpers.update_coordinator import CoordinatorEntity
21 
22 from .const import DOMAIN
23 from .coordinator import StookwijzerConfigEntry, StookwijzerCoordinator
24 
25 
26 @dataclass(kw_only=True, frozen=True)
28  """Class describing Stookwijzer sensor entities."""
29 
30  value_fn: Callable[[Stookwijzer], int | float | str | None]
31 
32 
33 STOOKWIJZER_SENSORS = [
35  key="windspeed",
36  native_unit_of_measurement=UnitOfSpeed.METERS_PER_SECOND,
37  suggested_unit_of_measurement=UnitOfSpeed.BEAUFORT,
38  device_class=SensorDeviceClass.WIND_SPEED,
39  suggested_display_precision=0,
40  state_class=SensorStateClass.MEASUREMENT,
41  value_fn=lambda client: client.windspeed_ms,
42  ),
44  key="air_quality_index",
45  device_class=SensorDeviceClass.AQI,
46  state_class=SensorStateClass.MEASUREMENT,
47  value_fn=lambda client: client.lki,
48  ),
50  key="advice",
51  translation_key="advice",
52  device_class=SensorDeviceClass.ENUM,
53  value_fn=lambda client: client.advice,
54  options=["code_yellow", "code_orange", "code_red"],
55  ),
56 ]
57 
58 
60  hass: HomeAssistant,
61  entry: StookwijzerConfigEntry,
62  async_add_entities: AddEntitiesCallback,
63 ) -> None:
64  """Set up Stookwijzer sensor from a config entry."""
66  StookwijzerSensor(description, entry) for description in STOOKWIJZER_SENSORS
67  )
68 
69 
70 class StookwijzerSensor(CoordinatorEntity[StookwijzerCoordinator], SensorEntity):
71  """Defines a Stookwijzer binary sensor."""
72 
73  entity_description: StookwijzerSensorDescription
74  _attr_attribution = "Data provided by atlasleefomgeving.nl"
75  _attr_has_entity_name = True
76 
77  def __init__(
78  self,
79  description: StookwijzerSensorDescription,
80  entry: StookwijzerConfigEntry,
81  ) -> None:
82  """Initialize a Stookwijzer device."""
83  super().__init__(entry.runtime_data)
84  self.entity_descriptionentity_description = description
85  self._attr_unique_id_attr_unique_id = f"{entry.entry_id}_{description.key}"
86  self._attr_device_info_attr_device_info = DeviceInfo(
87  identifiers={(DOMAIN, entry.entry_id)},
88  manufacturer="Atlas Leefomgeving",
89  entry_type=DeviceEntryType.SERVICE,
90  configuration_url="https://www.atlasleefomgeving.nl/stookwijzer",
91  )
92 
93  @property
94  def native_value(self) -> int | float | str | None:
95  """Return the state of the device."""
96  return self.entity_descriptionentity_description.value_fn(self.coordinator.client)
None __init__(self, StookwijzerSensorDescription description, StookwijzerConfigEntry entry)
Definition: sensor.py:81
None async_setup_entry(HomeAssistant hass, StookwijzerConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:63