Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for Satel Integra zone states- represented as binary sensors."""
2 
3 from __future__ import annotations
4 
6  BinarySensorDeviceClass,
7  BinarySensorEntity,
8 )
9 from homeassistant.core import HomeAssistant, callback
10 from homeassistant.helpers.dispatcher import async_dispatcher_connect
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
13 
14 from . import (
15  CONF_OUTPUTS,
16  CONF_ZONE_NAME,
17  CONF_ZONE_TYPE,
18  CONF_ZONES,
19  DATA_SATEL,
20  SIGNAL_OUTPUTS_UPDATED,
21  SIGNAL_ZONES_UPDATED,
22 )
23 
24 
26  hass: HomeAssistant,
27  config: ConfigType,
28  async_add_entities: AddEntitiesCallback,
29  discovery_info: DiscoveryInfoType | None = None,
30 ) -> None:
31  """Set up the Satel Integra binary sensor devices."""
32  if not discovery_info:
33  return
34 
35  configured_zones = discovery_info[CONF_ZONES]
36  controller = hass.data[DATA_SATEL]
37 
38  devices = []
39 
40  for zone_num, device_config_data in configured_zones.items():
41  zone_type = device_config_data[CONF_ZONE_TYPE]
42  zone_name = device_config_data[CONF_ZONE_NAME]
43  device = SatelIntegraBinarySensor(
44  controller, zone_num, zone_name, zone_type, CONF_ZONES, SIGNAL_ZONES_UPDATED
45  )
46  devices.append(device)
47 
48  configured_outputs = discovery_info[CONF_OUTPUTS]
49 
50  for zone_num, device_config_data in configured_outputs.items():
51  zone_type = device_config_data[CONF_ZONE_TYPE]
52  zone_name = device_config_data[CONF_ZONE_NAME]
53  device = SatelIntegraBinarySensor(
54  controller,
55  zone_num,
56  zone_name,
57  zone_type,
58  CONF_OUTPUTS,
59  SIGNAL_OUTPUTS_UPDATED,
60  )
61  devices.append(device)
62 
63  async_add_entities(devices)
64 
65 
67  """Representation of an Satel Integra binary sensor."""
68 
69  _attr_should_poll = False
70 
71  def __init__(
72  self,
73  controller,
74  device_number,
75  device_name,
76  zone_type,
77  sensor_type,
78  react_to_signal,
79  ):
80  """Initialize the binary_sensor."""
81  self._device_number_device_number = device_number
82  self._attr_unique_id_attr_unique_id = f"satel_{sensor_type}_{device_number}"
83  self._name_name = device_name
84  self._zone_type_zone_type = zone_type
85  self._state_state = 0
86  self._react_to_signal_react_to_signal = react_to_signal
87  self._satel_satel = controller
88 
89  async def async_added_to_hass(self) -> None:
90  """Register callbacks."""
91  if self._react_to_signal_react_to_signal == SIGNAL_OUTPUTS_UPDATED:
92  if self._device_number_device_number in self._satel_satel.violated_outputs:
93  self._state_state = 1
94  else:
95  self._state_state = 0
96  elif self._device_number_device_number in self._satel_satel.violated_zones:
97  self._state_state = 1
98  else:
99  self._state_state = 0
100  self.async_on_removeasync_on_remove(
102  self.hasshass, self._react_to_signal_react_to_signal, self._devices_updated_devices_updated
103  )
104  )
105 
106  @property
107  def name(self):
108  """Return the name of the entity."""
109  return self._name_name
110 
111  @property
112  def icon(self) -> str | None:
113  """Icon for device by its type."""
114  if self._zone_type_zone_type is BinarySensorDeviceClass.SMOKE:
115  return "mdi:fire"
116  return None
117 
118  @property
119  def is_on(self):
120  """Return true if sensor is on."""
121  return self._state_state == 1
122 
123  @property
124  def device_class(self):
125  """Return the class of this sensor, from DEVICE_CLASSES."""
126  return self._zone_type_zone_type
127 
128  @callback
129  def _devices_updated(self, zones):
130  """Update the zone's state, if needed."""
131  if self._device_number_device_number in zones and self._state_state != zones[self._device_number_device_number]:
132  self._state_state = zones[self._device_number_device_number]
133  self.async_write_ha_stateasync_write_ha_state()
def __init__(self, controller, device_number, device_name, zone_type, sensor_type, react_to_signal)
None async_on_remove(self, CALLBACK_TYPE func)
Definition: entity.py:1331
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103