Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for System Bridge binary sensors."""
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 CONF_PORT
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from .const import DOMAIN
19 from .coordinator import SystemBridgeDataUpdateCoordinator
20 from .data import SystemBridgeData
21 from .entity import SystemBridgeEntity
22 
23 
24 @dataclass(frozen=True)
26  """Class describing System Bridge binary sensor entities."""
27 
28  value_fn: Callable = round
29 
30 
31 def camera_in_use(data: SystemBridgeData) -> bool | None:
32  """Return if any camera is in use."""
33  if data.system.camera_usage is not None:
34  return len(data.system.camera_usage) > 0
35  return None
36 
37 
38 BASE_BINARY_SENSOR_TYPES: tuple[SystemBridgeBinarySensorEntityDescription, ...] = (
40  key="camera_in_use",
41  translation_key="camera_in_use",
42  icon="mdi:webcam",
43  value_fn=camera_in_use,
44  ),
46  key="pending_reboot",
47  translation_key="pending_reboot",
48  icon="mdi:restart",
49  value_fn=lambda data: data.system.pending_reboot,
50  ),
52  key="version_available",
53  device_class=BinarySensorDeviceClass.UPDATE,
54  value_fn=lambda data: data.system.version_newer_available,
55  ),
56 )
57 
58 BATTERY_BINARY_SENSOR_TYPES: tuple[SystemBridgeBinarySensorEntityDescription, ...] = (
60  key="battery_is_charging",
61  device_class=BinarySensorDeviceClass.BATTERY_CHARGING,
62  value_fn=lambda data: data.battery.is_charging,
63  ),
64 )
65 
66 
68  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
69 ) -> None:
70  """Set up System Bridge binary sensor based on a config entry."""
71  coordinator: SystemBridgeDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
72 
73  entities = [
74  SystemBridgeBinarySensor(coordinator, description, entry.data[CONF_PORT])
75  for description in BASE_BINARY_SENSOR_TYPES
76  ]
77 
78  if (
79  coordinator.data.battery
80  and coordinator.data.battery.percentage
81  and coordinator.data.battery.percentage > -1
82  ):
83  entities.extend(
84  SystemBridgeBinarySensor(coordinator, description, entry.data[CONF_PORT])
85  for description in BATTERY_BINARY_SENSOR_TYPES
86  )
87 
88  async_add_entities(entities)
89 
90 
92  """Define a System Bridge binary sensor."""
93 
94  entity_description: SystemBridgeBinarySensorEntityDescription
95 
96  def __init__(
97  self,
98  coordinator: SystemBridgeDataUpdateCoordinator,
99  description: SystemBridgeBinarySensorEntityDescription,
100  api_port: int,
101  ) -> None:
102  """Initialize."""
103  super().__init__(
104  coordinator,
105  api_port,
106  description.key,
107  )
108  self.entity_descriptionentity_description = description
109 
110  @property
111  def is_on(self) -> bool:
112  """Return the boolean state of the binary sensor."""
113  return self.entity_descriptionentity_description.value_fn(self.coordinator.data)
None __init__(self, SystemBridgeDataUpdateCoordinator coordinator, SystemBridgeBinarySensorEntityDescription description, int api_port)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
bool|None camera_in_use(SystemBridgeData data)