Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Dormakaba dKey integration binary sensor platform."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from py_dormakaba_dkey import DKEYLock
9 from py_dormakaba_dkey.commands import DoorPosition, Notifications, UnlockStatus
10 
12  BinarySensorDeviceClass,
13  BinarySensorEntity,
14  BinarySensorEntityDescription,
15 )
16 from homeassistant.config_entries import ConfigEntry
17 from homeassistant.core import HomeAssistant, callback
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
19 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
20 
21 from .const import DOMAIN
22 from .entity import DormakabaDkeyEntity
23 from .models import DormakabaDkeyData
24 
25 
26 @dataclass(frozen=True, kw_only=True)
28  """Describes Dormakaba dKey binary sensor entity."""
29 
30  is_on: Callable[[Notifications], bool]
31 
32 
33 BINARY_SENSOR_DESCRIPTIONS = (
35  key="door_position",
36  device_class=BinarySensorDeviceClass.DOOR,
37  is_on=lambda state: state.door_position == DoorPosition.OPEN,
38  ),
40  key="security_locked",
41  translation_key="deadbolt",
42  device_class=BinarySensorDeviceClass.LOCK,
43  is_on=lambda state: state.unlock_status
44  not in (UnlockStatus.SECURITY_LOCKED, UnlockStatus.UNLOCKED_SECURITY_LOCKED),
45  ),
46 )
47 
48 
50  hass: HomeAssistant,
51  entry: ConfigEntry,
52  async_add_entities: AddEntitiesCallback,
53 ) -> None:
54  """Set up the binary sensor platform for Dormakaba dKey."""
55  data: DormakabaDkeyData = hass.data[DOMAIN][entry.entry_id]
57  DormakabaDkeyBinarySensor(data.coordinator, data.lock, description)
58  for description in BINARY_SENSOR_DESCRIPTIONS
59  )
60 
61 
63  """Dormakaba dKey binary sensor."""
64 
65  _attr_has_entity_name = True
66  entity_description: DormakabaDkeyBinarySensorDescription
67 
68  def __init__(
69  self,
70  coordinator: DataUpdateCoordinator[None],
71  lock: DKEYLock,
72  description: DormakabaDkeyBinarySensorDescription,
73  ) -> None:
74  """Initialize a Dormakaba dKey binary sensor."""
75  self.entity_descriptionentity_description = description
76  self._attr_unique_id_attr_unique_id = f"{lock.address}_{description.key}"
77  super().__init__(coordinator, lock)
78 
79  @callback
80  def _async_update_attrs(self) -> None:
81  """Handle updating _attr values."""
82  self._attr_is_on_attr_is_on = self.entity_descriptionentity_description.is_on(self._lock_lock.state)
None __init__(self, DataUpdateCoordinator[None] coordinator, DKEYLock lock, DormakabaDkeyBinarySensorDescription description)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)