Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """IMGW-PIB binary sensor platform."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from imgw_pib.model import HydrologicalData
9 
11  BinarySensorDeviceClass,
12  BinarySensorEntity,
13  BinarySensorEntityDescription,
14 )
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from . import ImgwPibConfigEntry
19 from .coordinator import ImgwPibDataUpdateCoordinator
20 from .entity import ImgwPibEntity
21 
22 PARALLEL_UPDATES = 1
23 
24 
25 @dataclass(frozen=True, kw_only=True)
27  """IMGW-PIB sensor entity description."""
28 
29  value: Callable[[HydrologicalData], bool | None]
30 
31 
32 BINARY_SENSOR_TYPES: tuple[ImgwPibBinarySensorEntityDescription, ...] = (
34  key="flood_warning",
35  translation_key="flood_warning",
36  device_class=BinarySensorDeviceClass.SAFETY,
37  value=lambda data: data.flood_warning,
38  ),
40  key="flood_alarm",
41  translation_key="flood_alarm",
42  device_class=BinarySensorDeviceClass.SAFETY,
43  value=lambda data: data.flood_alarm,
44  ),
45 )
46 
47 
49  hass: HomeAssistant,
50  entry: ImgwPibConfigEntry,
51  async_add_entities: AddEntitiesCallback,
52 ) -> None:
53  """Add a IMGW-PIB binary sensor entity from a config_entry."""
54  coordinator = entry.runtime_data.coordinator
55 
57  ImgwPibBinarySensorEntity(coordinator, description)
58  for description in BINARY_SENSOR_TYPES
59  if getattr(coordinator.data, description.key) is not None
60  )
61 
62 
64  """Define IMGW-PIB binary sensor entity."""
65 
66  entity_description: ImgwPibBinarySensorEntityDescription
67 
68  def __init__(
69  self,
70  coordinator: ImgwPibDataUpdateCoordinator,
71  description: ImgwPibBinarySensorEntityDescription,
72  ) -> None:
73  """Initialize."""
74  super().__init__(coordinator)
75 
76  self._attr_unique_id_attr_unique_id = f"{coordinator.station_id}_{description.key}"
77  self.entity_descriptionentity_description = description
78 
79  @property
80  def is_on(self) -> bool | None:
81  """Return true if the binary sensor is on."""
82  return self.entity_descriptionentity_description.value(self.coordinator.data)
None __init__(self, ImgwPibDataUpdateCoordinator coordinator, ImgwPibBinarySensorEntityDescription description)
None async_setup_entry(HomeAssistant hass, ImgwPibConfigEntry entry, AddEntitiesCallback async_add_entities)