Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for RDW sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from datetime import date
8 
9 from vehicle import Vehicle
10 
12  SensorDeviceClass,
13  SensorEntity,
14  SensorEntityDescription,
15 )
16 from homeassistant.config_entries import ConfigEntry
17 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
21  CoordinatorEntity,
22  DataUpdateCoordinator,
23 )
24 
25 from .const import CONF_LICENSE_PLATE, DOMAIN
26 
27 
28 @dataclass(frozen=True, kw_only=True)
30  """Describes RDW sensor entity."""
31 
32  value_fn: Callable[[Vehicle], date | str | float | None]
33 
34 
35 SENSORS: tuple[RDWSensorEntityDescription, ...] = (
37  key="apk_expiration",
38  translation_key="apk_expiration",
39  device_class=SensorDeviceClass.DATE,
40  value_fn=lambda vehicle: vehicle.apk_expiration,
41  ),
43  key="ascription_date",
44  translation_key="ascription_date",
45  device_class=SensorDeviceClass.DATE,
46  value_fn=lambda vehicle: vehicle.ascription_date,
47  ),
48 )
49 
50 
52  hass: HomeAssistant,
53  entry: ConfigEntry,
54  async_add_entities: AddEntitiesCallback,
55 ) -> None:
56  """Set up RDW sensors based on a config entry."""
57  coordinator = hass.data[DOMAIN][entry.entry_id]
60  coordinator=coordinator,
61  license_plate=entry.data[CONF_LICENSE_PLATE],
62  description=description,
63  )
64  for description in SENSORS
65  )
66 
67 
68 class RDWSensorEntity(CoordinatorEntity[DataUpdateCoordinator[Vehicle]], SensorEntity):
69  """Defines an RDW sensor."""
70 
71  entity_description: RDWSensorEntityDescription
72  _attr_has_entity_name = True
73 
74  def __init__(
75  self,
76  *,
77  coordinator: DataUpdateCoordinator[Vehicle],
78  license_plate: str,
79  description: RDWSensorEntityDescription,
80  ) -> None:
81  """Initialize RDW sensor."""
82  super().__init__(coordinator=coordinator)
83  self.entity_descriptionentity_description = description
84  self._attr_unique_id_attr_unique_id = f"{license_plate}_{description.key}"
85 
86  self._attr_device_info_attr_device_info = DeviceInfo(
87  entry_type=DeviceEntryType.SERVICE,
88  identifiers={(DOMAIN, f"{license_plate}")},
89  manufacturer=coordinator.data.brand,
90  name=f"{coordinator.data.brand} {coordinator.data.license_plate}",
91  model=coordinator.data.model,
92  configuration_url=f"https://ovi.rdw.nl/default.aspx?kenteken={coordinator.data.license_plate}",
93  )
94 
95  @property
96  def native_value(self) -> date | str | float | None:
97  """Return the state of the sensor."""
98  return self.entity_descriptionentity_description.value_fn(self.coordinator.data)
None __init__(self, *DataUpdateCoordinator[Vehicle] coordinator, str license_plate, RDWSensorEntityDescription description)
Definition: sensor.py:80
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:55