1 """Support for Satel Integra alarm, using ETHM module."""
3 from __future__
import annotations
6 from collections
import OrderedDict
9 from satel_integra.satel_integra
import AlarmState
12 AlarmControlPanelEntity,
13 AlarmControlPanelEntityFeature,
14 AlarmControlPanelState,
24 CONF_DEVICE_PARTITIONS,
30 _LOGGER = logging.getLogger(__name__)
36 async_add_entities: AddEntitiesCallback,
37 discovery_info: DiscoveryInfoType |
None =
None,
39 """Set up for Satel Integra alarm panels."""
40 if not discovery_info:
43 configured_partitions = discovery_info[CONF_DEVICE_PARTITIONS]
44 controller = hass.data[DATA_SATEL]
48 for partition_num, device_config_data
in configured_partitions.items():
49 zone_name = device_config_data[CONF_ZONE_NAME]
50 arm_home_mode = device_config_data.get(CONF_ARM_HOME_MODE)
52 controller, zone_name, arm_home_mode, partition_num
54 devices.append(device)
60 """Representation of an AlarmDecoder-based alarm panel."""
62 _attr_code_format = CodeFormat.NUMBER
63 _attr_should_poll =
False
64 _attr_supported_features = (
65 AlarmControlPanelEntityFeature.ARM_HOME
66 | AlarmControlPanelEntityFeature.ARM_AWAY
69 def __init__(self, controller, name, arm_home_mode, partition_id):
70 """Initialize the alarm panel."""
77 """Update alarm status and register callbacks for future updates."""
78 _LOGGER.debug(
"Starts listening for panel messages")
88 """Handle alarm status update."""
90 _LOGGER.debug(
"Got status update, current status: %s", state)
95 _LOGGER.debug(
"Ignoring alarm status message, same state")
98 """Read current status of the alarm and translate it into HA status."""
101 hass_alarm_status = AlarmControlPanelState.DISARMED
103 if not self.
_satel_satel.connected:
106 state_map = OrderedDict(
108 (AlarmState.TRIGGERED, AlarmControlPanelState.TRIGGERED),
109 (AlarmState.TRIGGERED_FIRE, AlarmControlPanelState.TRIGGERED),
110 (AlarmState.ENTRY_TIME, AlarmControlPanelState.PENDING),
111 (AlarmState.ARMED_MODE3, AlarmControlPanelState.ARMED_HOME),
112 (AlarmState.ARMED_MODE2, AlarmControlPanelState.ARMED_HOME),
113 (AlarmState.ARMED_MODE1, AlarmControlPanelState.ARMED_HOME),
114 (AlarmState.ARMED_MODE0, AlarmControlPanelState.ARMED_AWAY),
116 AlarmState.EXIT_COUNTDOWN_OVER_10,
117 AlarmControlPanelState.PENDING,
120 AlarmState.EXIT_COUNTDOWN_UNDER_10,
121 AlarmControlPanelState.PENDING,
125 _LOGGER.debug(
"State map of Satel: %s", self.
_satel_satel.partition_states)
127 for satel_state, ha_state
in state_map.items():
129 satel_state
in self.
_satel_satel.partition_states
132 hass_alarm_status = ha_state
135 return hass_alarm_status
138 """Send disarm command."""
140 _LOGGER.debug(
"Code was empty or None")
143 clear_alarm_necessary = (
147 _LOGGER.debug(
"Disarming, self._attr_alarm_state: %s", self.
_attr_alarm_state_attr_alarm_state)
151 if clear_alarm_necessary:
153 await asyncio.sleep(1)
157 """Send arm away command."""
158 _LOGGER.debug(
"Arming away")
164 """Send arm home command."""
165 _LOGGER.debug(
"Arming home")
def __init__(self, controller, name, arm_home_mode, partition_id)
def _read_alarm_state(self)
None async_alarm_arm_away(self, str|None code=None)
None async_alarm_arm_home(self, str|None code=None)
None async_alarm_disarm(self, str|None code=None)
None async_added_to_hass(self)
def _update_alarm_status(self)
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
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)