Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from fjaraskupan import Device
9 
11  BinarySensorDeviceClass,
12  BinarySensorEntity,
13  BinarySensorEntityDescription,
14 )
15 from homeassistant.config_entries import ConfigEntry
16 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.device_registry import DeviceInfo
18 from homeassistant.helpers.entity import Entity
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 from homeassistant.helpers.update_coordinator import CoordinatorEntity
21 
22 from . import async_setup_entry_platform
23 from .coordinator import FjaraskupanCoordinator
24 
25 
26 @dataclass(frozen=True)
28  """Entity description."""
29 
30  is_on: Callable = lambda _: False
31 
32 
33 SENSORS = (
35  key="grease-filter",
36  translation_key="grease_filter",
37  device_class=BinarySensorDeviceClass.PROBLEM,
38  is_on=lambda state: state.grease_filter_full,
39  ),
41  key="carbon-filter",
42  translation_key="carbon_filter",
43  device_class=BinarySensorDeviceClass.PROBLEM,
44  is_on=lambda state: state.carbon_filter_full,
45  ),
46 )
47 
48 
50  hass: HomeAssistant,
51  config_entry: ConfigEntry,
52  async_add_entities: AddEntitiesCallback,
53 ) -> None:
54  """Set up sensors dynamically through discovery."""
55 
56  def _constructor(coordinator: FjaraskupanCoordinator) -> list[Entity]:
57  return [
59  coordinator,
60  coordinator.device,
61  coordinator.device_info,
62  entity_description,
63  )
64  for entity_description in SENSORS
65  ]
66 
67  async_setup_entry_platform(hass, config_entry, async_add_entities, _constructor)
68 
69 
70 class BinarySensor(CoordinatorEntity[FjaraskupanCoordinator], BinarySensorEntity):
71  """Grease filter sensor."""
72 
73  entity_description: EntityDescription
74  _attr_has_entity_name = True
75 
76  def __init__(
77  self,
78  coordinator: FjaraskupanCoordinator,
79  device: Device,
80  device_info: DeviceInfo,
81  entity_description: EntityDescription,
82  ) -> None:
83  """Init sensor."""
84  super().__init__(coordinator)
85  self.entity_descriptionentity_description = entity_description
86 
87  self._attr_unique_id_attr_unique_id = f"{device.address}-{entity_description.key}"
88  self._attr_device_info_attr_device_info = device_info
89 
90  @property
91  def is_on(self) -> bool | None:
92  """Return true if the binary sensor is on."""
93  if data := self.coordinator.data:
94  return self.entity_descriptionentity_description.is_on(data)
95  return None
None __init__(self, FjaraskupanCoordinator coordinator, Device device, DeviceInfo device_info, EntityDescription entity_description)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
None async_setup_entry_platform(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities, Callable[[FjaraskupanCoordinator], list[Entity]] constructor)
Definition: __init__.py:111