Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support for Satel Integra modifiable outputs represented as switches."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 from homeassistant.components.switch import SwitchEntity
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_DEVICE_CODE,
16  CONF_SWITCHABLE_OUTPUTS,
17  CONF_ZONE_NAME,
18  DATA_SATEL,
19  SIGNAL_OUTPUTS_UPDATED,
20 )
21 
22 _LOGGER = logging.getLogger(__name__)
23 
24 DEPENDENCIES = ["satel_integra"]
25 
26 
28  hass: HomeAssistant,
29  config: ConfigType,
30  async_add_entities: AddEntitiesCallback,
31  discovery_info: DiscoveryInfoType | None = None,
32 ) -> None:
33  """Set up the Satel Integra switch devices."""
34  if not discovery_info:
35  return
36 
37  configured_zones = discovery_info[CONF_SWITCHABLE_OUTPUTS]
38  controller = hass.data[DATA_SATEL]
39 
40  devices = []
41 
42  for zone_num, device_config_data in configured_zones.items():
43  zone_name = device_config_data[CONF_ZONE_NAME]
44 
45  device = SatelIntegraSwitch(
46  controller, zone_num, zone_name, discovery_info[CONF_DEVICE_CODE]
47  )
48  devices.append(device)
49 
50  async_add_entities(devices)
51 
52 
54  """Representation of an Satel switch."""
55 
56  _attr_should_poll = False
57 
58  def __init__(self, controller, device_number, device_name, code):
59  """Initialize the binary_sensor."""
60  self._device_number_device_number = device_number
61  self._name_name = device_name
62  self._state_state = False
63  self._code_code = code
64  self._satel_satel = controller
65 
66  async def async_added_to_hass(self) -> None:
67  """Register callbacks."""
69  self.hasshass, SIGNAL_OUTPUTS_UPDATED, self._devices_updated_devices_updated
70  )
71 
72  @callback
73  def _devices_updated(self, zones):
74  """Update switch state, if needed."""
75  _LOGGER.debug("Update switch name: %s zones: %s", self._name_name, zones)
76  if self._device_number_device_number in zones:
77  new_state = self._read_state_read_state()
78  _LOGGER.debug("New state: %s", new_state)
79  if new_state != self._state_state:
80  self._state_state = new_state
81  self.async_write_ha_stateasync_write_ha_state()
82 
83  async def async_turn_on(self, **kwargs: Any) -> None:
84  """Turn the device on."""
85  _LOGGER.debug("Switch: %s status: %s, turning on", self._name_name, self._state_state)
86  await self._satel_satel.set_output(self._code_code, self._device_number_device_number, True)
87  self.async_write_ha_stateasync_write_ha_state()
88 
89  async def async_turn_off(self, **kwargs: Any) -> None:
90  """Turn the device off."""
91  _LOGGER.debug(
92  "Switch name: %s status: %s, turning off", self._name_name, self._state_state
93  )
94  await self._satel_satel.set_output(self._code_code, self._device_number_device_number, False)
95  self.async_write_ha_stateasync_write_ha_state()
96 
97  @property
98  def is_on(self):
99  """Return true if device is on."""
100  self._state_state = self._read_state_read_state()
101  return self._state_state
102 
103  def _read_state(self):
104  """Read state of the device."""
105  return self._device_number_device_number in self._satel_satel.violated_outputs
106 
107  @property
108  def name(self):
109  """Return the name of the switch."""
110  return self._name_name
def __init__(self, controller, device_number, device_name, code)
Definition: switch.py:58
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: switch.py:32
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103