Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Binary sensor entity platform for Tailwind."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from gotailwind import TailwindDoor
9 
11  BinarySensorDeviceClass,
12  BinarySensorEntity,
13  BinarySensorEntityDescription,
14 )
15 from homeassistant.const import EntityCategory
16 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 
19 from .entity import TailwindDoorEntity
20 from .typing import TailwindConfigEntry
21 
22 
23 @dataclass(kw_only=True, frozen=True)
25  """Class describing Tailwind door binary sensor entities."""
26 
27  is_on_fn: Callable[[TailwindDoor], bool]
28 
29 
30 DESCRIPTIONS: tuple[TailwindDoorBinarySensorEntityDescription, ...] = (
32  key="locked_out",
33  translation_key="operational_problem",
34  entity_category=EntityCategory.DIAGNOSTIC,
35  device_class=BinarySensorDeviceClass.PROBLEM,
36  is_on_fn=lambda door: door.locked_out,
37  ),
38 )
39 
40 
42  hass: HomeAssistant,
43  entry: TailwindConfigEntry,
44  async_add_entities: AddEntitiesCallback,
45 ) -> None:
46  """Set up Tailwind binary sensor based on a config entry."""
48  TailwindDoorBinarySensorEntity(entry.runtime_data, door_id, description)
49  for description in DESCRIPTIONS
50  for door_id in entry.runtime_data.data.doors
51  )
52 
53 
55  """Representation of a Tailwind door binary sensor entity."""
56 
57  entity_description: TailwindDoorBinarySensorEntityDescription
58 
59  @property
60  def is_on(self) -> bool | None:
61  """Return the state of the binary sensor."""
62  return self.entity_descriptionentity_description.is_on_fn(
63  self.coordinator.data.doors[self.door_iddoor_id]
64  )
None async_setup_entry(HomeAssistant hass, TailwindConfigEntry entry, AddEntitiesCallback async_add_entities)