Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for RDW binary sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from vehicle import Vehicle
9 
11  BinarySensorDeviceClass,
12  BinarySensorEntity,
13  BinarySensorEntityDescription,
14 )
15 from homeassistant.config_entries import ConfigEntry
16 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20  CoordinatorEntity,
21  DataUpdateCoordinator,
22 )
23 
24 from .const import DOMAIN
25 
26 
27 @dataclass(frozen=True, kw_only=True)
29  """Describes RDW binary sensor entity."""
30 
31  is_on_fn: Callable[[Vehicle], bool | None]
32 
33 
34 BINARY_SENSORS: tuple[RDWBinarySensorEntityDescription, ...] = (
36  key="liability_insured",
37  translation_key="liability_insured",
38  is_on_fn=lambda vehicle: vehicle.liability_insured,
39  ),
41  key="pending_recall",
42  translation_key="pending_recall",
43  device_class=BinarySensorDeviceClass.PROBLEM,
44  is_on_fn=lambda vehicle: vehicle.pending_recall,
45  ),
46 )
47 
48 
50  hass: HomeAssistant,
51  entry: ConfigEntry,
52  async_add_entities: AddEntitiesCallback,
53 ) -> None:
54  """Set up RDW binary sensors based on a config entry."""
55  coordinator = hass.data[DOMAIN][entry.entry_id]
58  coordinator=coordinator,
59  description=description,
60  )
61  for description in BINARY_SENSORS
62  if description.is_on_fn(coordinator.data) is not None
63  )
64 
65 
67  CoordinatorEntity[DataUpdateCoordinator[Vehicle]], BinarySensorEntity
68 ):
69  """Defines an RDW binary sensor."""
70 
71  entity_description: RDWBinarySensorEntityDescription
72  _attr_has_entity_name = True
73 
74  def __init__(
75  self,
76  *,
77  coordinator: DataUpdateCoordinator[Vehicle],
78  description: RDWBinarySensorEntityDescription,
79  ) -> None:
80  """Initialize RDW binary sensor."""
81  super().__init__(coordinator=coordinator)
82  self.entity_descriptionentity_description = description
83  self._attr_unique_id_attr_unique_id = f"{coordinator.data.license_plate}_{description.key}"
84 
85  self._attr_device_info_attr_device_info = DeviceInfo(
86  entry_type=DeviceEntryType.SERVICE,
87  identifiers={(DOMAIN, coordinator.data.license_plate)},
88  manufacturer=coordinator.data.brand,
89  name=f"{coordinator.data.brand} {coordinator.data.license_plate}",
90  model=coordinator.data.model,
91  configuration_url=f"https://ovi.rdw.nl/default.aspx?kenteken={coordinator.data.license_plate}",
92  )
93 
94  @property
95  def is_on(self) -> bool:
96  """Return the state of the sensor."""
97  return bool(self.entity_descriptionentity_description.is_on_fn(self.coordinator.data))
None __init__(self, *DataUpdateCoordinator[Vehicle] coordinator, RDWBinarySensorEntityDescription description)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)