1 """Support for deCONZ alarm control panel devices."""
3 from __future__
import annotations
5 from pydeconz.models.alarm_system
import AlarmSystemArmAction
6 from pydeconz.models.event
import EventType
7 from pydeconz.models.sensor.ancillary_control
import (
13 DOMAIN
as ALARM_CONTROl_PANEL_DOMAIN,
14 AlarmControlPanelEntity,
15 AlarmControlPanelEntityFeature,
16 AlarmControlPanelState,
23 from .entity
import DeconzDevice
24 from .hub
import DeconzHub
26 DECONZ_TO_ALARM_STATE = {
27 AncillaryControlPanel.ARMED_AWAY: AlarmControlPanelState.ARMED_AWAY,
28 AncillaryControlPanel.ARMED_NIGHT: AlarmControlPanelState.ARMED_NIGHT,
29 AncillaryControlPanel.ARMED_STAY: AlarmControlPanelState.ARMED_HOME,
30 AncillaryControlPanel.ARMING_AWAY: AlarmControlPanelState.ARMING,
31 AncillaryControlPanel.ARMING_NIGHT: AlarmControlPanelState.ARMING,
32 AncillaryControlPanel.ARMING_STAY: AlarmControlPanelState.ARMING,
33 AncillaryControlPanel.DISARMED: AlarmControlPanelState.DISARMED,
34 AncillaryControlPanel.ENTRY_DELAY: AlarmControlPanelState.PENDING,
35 AncillaryControlPanel.EXIT_DELAY: AlarmControlPanelState.PENDING,
36 AncillaryControlPanel.IN_ALARM: AlarmControlPanelState.TRIGGERED,
41 """Retrieve alarm system ID the unique ID is registered to."""
42 for alarm_system
in hub.api.alarm_systems.values():
43 if unique_id
in alarm_system.devices:
44 return alarm_system.resource_id
50 config_entry: ConfigEntry,
51 async_add_entities: AddEntitiesCallback,
53 """Set up the deCONZ alarm control panel devices."""
54 hub = DeconzHub.get_hub(hass, config_entry)
55 hub.entities[ALARM_CONTROl_PANEL_DOMAIN] = set()
58 def async_add_sensor(_: EventType, sensor_id: str) ->
None:
59 """Add alarm control panel devices from deCONZ."""
60 sensor = hub.api.sensors.ancillary_control[sensor_id]
64 hub.register_platform_add_device_callback(
66 hub.api.sensors.ancillary_control,
71 """Representation of a deCONZ alarm control panel."""
74 TYPE = ALARM_CONTROl_PANEL_DOMAIN
76 _attr_code_format = CodeFormat.NUMBER
77 _attr_supported_features = (
78 AlarmControlPanelEntityFeature.ARM_AWAY
79 | AlarmControlPanelEntityFeature.ARM_HOME
80 | AlarmControlPanelEntityFeature.ARM_NIGHT
85 device: AncillaryControl,
89 """Set up alarm control panel device."""
95 """Update the control panels state."""
96 if self._device.panel
in DECONZ_TO_ALARM_STATE:
101 """Return the state of the control panel."""
102 if self._device.panel
in DECONZ_TO_ALARM_STATE:
103 return DECONZ_TO_ALARM_STATE[self._device.panel]
107 """Send arm away command."""
109 await self.hub.api.alarm_systems.arm(
114 """Send arm home command."""
116 await self.hub.api.alarm_systems.arm(
121 """Send arm night command."""
123 await self.hub.api.alarm_systems.arm(
128 """Send disarm command."""
130 await self.hub.api.alarm_systems.arm(
None async_alarm_arm_night(self, str|None code=None)
None async_alarm_arm_away(self, str|None code=None)
None async_alarm_disarm(self, str|None code=None)
None __init__(self, AncillaryControl device, DeconzHub hub, str alarm_system_id)
None async_alarm_arm_home(self, str|None code=None)
AlarmControlPanelState|None alarm_state(self)
None async_update_callback(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
str|None get_alarm_system_id_for_unique_id(DeconzHub hub, str unique_id)