Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """binary sensors for Ukraine Alarm integration."""
2 
3 from __future__ import annotations
4 
6  BinarySensorDeviceClass,
7  BinarySensorEntity,
8  BinarySensorEntityDescription,
9 )
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import CONF_NAME
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 from homeassistant.helpers.update_coordinator import CoordinatorEntity
16 
17 from .const import (
18  ALERT_TYPE_AIR,
19  ALERT_TYPE_ARTILLERY,
20  ALERT_TYPE_CHEMICAL,
21  ALERT_TYPE_NUCLEAR,
22  ALERT_TYPE_UNKNOWN,
23  ALERT_TYPE_URBAN_FIGHTS,
24  ATTRIBUTION,
25  DOMAIN,
26  MANUFACTURER,
27 )
28 from .coordinator import UkraineAlarmDataUpdateCoordinator
29 
30 BINARY_SENSOR_TYPES: tuple[BinarySensorEntityDescription, ...] = (
32  key=ALERT_TYPE_UNKNOWN,
33  translation_key="unknown",
34  device_class=BinarySensorDeviceClass.SAFETY,
35  ),
37  key=ALERT_TYPE_AIR,
38  translation_key="air",
39  device_class=BinarySensorDeviceClass.SAFETY,
40  ),
42  key=ALERT_TYPE_URBAN_FIGHTS,
43  translation_key="urban_fights",
44  device_class=BinarySensorDeviceClass.SAFETY,
45  ),
47  key=ALERT_TYPE_ARTILLERY,
48  translation_key="artillery",
49  device_class=BinarySensorDeviceClass.SAFETY,
50  ),
52  key=ALERT_TYPE_CHEMICAL,
53  translation_key="chemical",
54  device_class=BinarySensorDeviceClass.SAFETY,
55  ),
57  key=ALERT_TYPE_NUCLEAR,
58  translation_key="nuclear",
59  device_class=BinarySensorDeviceClass.SAFETY,
60  ),
61 )
62 
63 
65  hass: HomeAssistant,
66  config_entry: ConfigEntry,
67  async_add_entities: AddEntitiesCallback,
68 ) -> None:
69  """Set up Ukraine Alarm binary sensor entities based on a config entry."""
70  name = config_entry.data[CONF_NAME]
71  coordinator = hass.data[DOMAIN][config_entry.entry_id]
72 
75  name,
76  config_entry.unique_id,
77  description,
78  coordinator,
79  )
80  for description in BINARY_SENSOR_TYPES
81  )
82 
83 
85  CoordinatorEntity[UkraineAlarmDataUpdateCoordinator], BinarySensorEntity
86 ):
87  """Class for a Ukraine Alarm binary sensor."""
88 
89  _attr_attribution = ATTRIBUTION
90  _attr_has_entity_name = True
91 
92  def __init__(
93  self,
94  name,
95  unique_id,
96  description: BinarySensorEntityDescription,
97  coordinator: UkraineAlarmDataUpdateCoordinator,
98  ) -> None:
99  """Initialize the sensor."""
100  super().__init__(coordinator)
101 
102  self.entity_descriptionentity_description = description
103 
104  self._attr_unique_id_attr_unique_id = f"{unique_id}-{description.key}".lower()
105  self._attr_device_info_attr_device_info = DeviceInfo(
106  entry_type=DeviceEntryType.SERVICE,
107  identifiers={(DOMAIN, unique_id)},
108  manufacturer=MANUFACTURER,
109  name=name,
110  configuration_url="https://siren.pp.ua/",
111  )
112 
113  @property
114  def is_on(self) -> bool | None:
115  """Return true if the binary sensor is on."""
116  return self.coordinator.data.get(self.entity_descriptionentity_description.key, None)
None __init__(self, name, unique_id, BinarySensorEntityDescription description, UkraineAlarmDataUpdateCoordinator coordinator)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)