1 """Module for SIA Alarm Control Panels."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
7 from typing
import TYPE_CHECKING
9 from pysiaalarm
import SIAEvent
12 AlarmControlPanelEntity,
13 AlarmControlPanelEntityDescription,
14 AlarmControlPanelState,
21 from .const
import CONF_ACCOUNT, CONF_ACCOUNTS, CONF_ZONES, KEY_ALARM, PREVIOUS_STATE
22 from .entity
import SIABaseEntity, SIAEntityDescription
24 _LOGGER = logging.getLogger(__name__)
27 @dataclass(frozen=True)
29 AlarmControlPanelEntityDescription,
32 """Describes SIA alarm control panel entity."""
38 "PA": AlarmControlPanelState.TRIGGERED,
39 "JA": AlarmControlPanelState.TRIGGERED,
40 "TA": AlarmControlPanelState.TRIGGERED,
41 "BA": AlarmControlPanelState.TRIGGERED,
42 "HA": AlarmControlPanelState.TRIGGERED,
43 "CA": AlarmControlPanelState.ARMED_AWAY,
44 "CB": AlarmControlPanelState.ARMED_AWAY,
45 "CG": AlarmControlPanelState.ARMED_AWAY,
46 "CL": AlarmControlPanelState.ARMED_AWAY,
47 "CP": AlarmControlPanelState.ARMED_AWAY,
48 "CQ": AlarmControlPanelState.ARMED_AWAY,
49 "CS": AlarmControlPanelState.ARMED_AWAY,
50 "CF": AlarmControlPanelState.ARMED_CUSTOM_BYPASS,
51 "NP": AlarmControlPanelState.DISARMED,
52 "NO": AlarmControlPanelState.DISARMED,
53 "OA": AlarmControlPanelState.DISARMED,
54 "OB": AlarmControlPanelState.DISARMED,
55 "OG": AlarmControlPanelState.DISARMED,
56 "OP": AlarmControlPanelState.DISARMED,
57 "OQ": AlarmControlPanelState.DISARMED,
58 "OR": AlarmControlPanelState.DISARMED,
59 "OS": AlarmControlPanelState.DISARMED,
60 "NC": AlarmControlPanelState.ARMED_NIGHT,
61 "NL": AlarmControlPanelState.ARMED_NIGHT,
62 "NE": AlarmControlPanelState.ARMED_NIGHT,
63 "NF": AlarmControlPanelState.ARMED_NIGHT,
72 async_add_entities: AddEntitiesCallback,
74 """Set up SIA alarm_control_panel(s) from a config entry."""
77 entry, account_data[CONF_ACCOUNT], zone, ENTITY_DESCRIPTION_ALARM
79 for account_data
in entry.data[CONF_ACCOUNTS]
82 entry.options[CONF_ACCOUNTS][account_data[CONF_ACCOUNT]][CONF_ZONES] + 1,
88 """Class for SIA Alarm Control Panels."""
90 entity_description: SIAAlarmControlPanelEntityDescription
97 entity_description: SIAAlarmControlPanelEntityDescription,
99 """Create SIAAlarmControlPanel object."""
108 self.
_old_state_old_state: AlarmControlPanelState |
None =
None
111 """Handle the last state."""
113 if last_state
is not None and last_state.state
not in (
117 self.
_attr_alarm_state_attr_alarm_state = AlarmControlPanelState(last_state.state)
122 """Update the state of the alarm control panel.
124 Return True if the event was relevant for this entity.
128 new_state = self.
entity_descriptionentity_description.code_consequences.get(sia_event.code)
129 if new_state
is None:
131 _LOGGER.debug(
"New state will be %s", new_state)
132 if new_state == PREVIOUS_STATE:
135 assert isinstance(new_state, AlarmControlPanelState)
None handle_last_state(self, State|None last_state)
bool update_state(self, SIAEvent sia_event)
None __init__(self, ConfigEntry entry, str account, int zone, SIAAlarmControlPanelEntityDescription entity_description)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)