Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Platform for Schlage binary_sensor integration."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
9  BinarySensorDeviceClass,
10  BinarySensorEntity,
11  BinarySensorEntityDescription,
12 )
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.const import EntityCategory
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from .const import DOMAIN
19 from .coordinator import LockData, SchlageDataUpdateCoordinator
20 from .entity import SchlageEntity
21 
22 
23 @dataclass(frozen=True, kw_only=True)
25  """Entity description for a Schlage binary_sensor."""
26 
27  value_fn: Callable[[LockData], bool]
28 
29 
30 _DESCRIPTIONS: tuple[SchlageBinarySensorEntityDescription] = (
32  key="keypad_disabled",
33  translation_key="keypad_disabled",
34  device_class=BinarySensorDeviceClass.PROBLEM,
35  entity_category=EntityCategory.DIAGNOSTIC,
36  value_fn=lambda data: data.lock.keypad_disabled(data.logs),
37  ),
38 )
39 
40 
42  hass: HomeAssistant,
43  config_entry: ConfigEntry,
44  async_add_entities: AddEntitiesCallback,
45 ) -> None:
46  """Set up binary_sensors based on a config entry."""
47  coordinator: SchlageDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
48 
49  def _add_new_locks(locks: dict[str, LockData]) -> None:
52  coordinator=coordinator,
53  description=description,
54  device_id=device_id,
55  )
56  for device_id in locks
57  for description in _DESCRIPTIONS
58  )
59 
60  _add_new_locks(coordinator.data.locks)
61  coordinator.new_locks_callbacks.append(_add_new_locks)
62 
63 
65  """Schlage binary_sensor entity."""
66 
67  entity_description: SchlageBinarySensorEntityDescription
68 
69  def __init__(
70  self,
71  coordinator: SchlageDataUpdateCoordinator,
72  description: SchlageBinarySensorEntityDescription,
73  device_id: str,
74  ) -> None:
75  """Initialize a SchlageBinarySensor."""
76  super().__init__(coordinator, device_id)
77  self.entity_descriptionentity_description = description
78  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{device_id}_{self.entity_description.key}"
79 
80  @property
81  def is_on(self) -> bool | None:
82  """Return true if the binary_sensor is on."""
83  return self.entity_descriptionentity_description.value_fn(self._lock_data_lock_data)
None __init__(self, SchlageDataUpdateCoordinator coordinator, SchlageBinarySensorEntityDescription description, str device_id)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
None _add_new_locks(dict[str, LockData] locks)
Definition: sensor.py:39