Home Assistant Unofficial Reference 2024.12.1
alarm_control_panel.py
Go to the documentation of this file.
1 """Alarm control panels on Zigbee Home Automation networks."""
2 
3 from __future__ import annotations
4 
5 import functools
6 
7 from zha.application.platforms.alarm_control_panel.const import (
8  AlarmState as ZHAAlarmState,
9 )
10 
12  AlarmControlPanelEntity,
13  AlarmControlPanelEntityFeature,
14  AlarmControlPanelState,
15  CodeFormat,
16 )
17 from homeassistant.config_entries import ConfigEntry
18 from homeassistant.const import Platform
19 from homeassistant.core import HomeAssistant
20 from homeassistant.helpers.dispatcher import async_dispatcher_connect
21 from homeassistant.helpers.entity_platform import AddEntitiesCallback
22 
23 from .entity import ZHAEntity
24 from .helpers import (
25  SIGNAL_ADD_ENTITIES,
26  async_add_entities as zha_async_add_entities,
27  convert_zha_error_to_ha_error,
28  get_zha_data,
29 )
30 
31 ZHA_STATE_TO_ALARM_STATE_MAP = {
32  ZHAAlarmState.DISARMED.value: AlarmControlPanelState.DISARMED,
33  ZHAAlarmState.ARMED_HOME.value: AlarmControlPanelState.ARMED_HOME,
34  ZHAAlarmState.ARMED_AWAY.value: AlarmControlPanelState.ARMED_AWAY,
35  ZHAAlarmState.ARMED_NIGHT.value: AlarmControlPanelState.ARMED_NIGHT,
36  ZHAAlarmState.ARMED_VACATION.value: AlarmControlPanelState.ARMED_VACATION,
37  ZHAAlarmState.ARMED_CUSTOM_BYPASS.value: AlarmControlPanelState.ARMED_CUSTOM_BYPASS,
38  ZHAAlarmState.PENDING.value: AlarmControlPanelState.PENDING,
39  ZHAAlarmState.ARMING.value: AlarmControlPanelState.ARMING,
40  ZHAAlarmState.DISARMING.value: AlarmControlPanelState.DISARMING,
41  ZHAAlarmState.TRIGGERED.value: AlarmControlPanelState.TRIGGERED,
42  ZHAAlarmState.UNKNOWN.value: None,
43 }
44 
45 
47  hass: HomeAssistant,
48  config_entry: ConfigEntry,
49  async_add_entities: AddEntitiesCallback,
50 ) -> None:
51  """Set up the Zigbee Home Automation alarm control panel from config entry."""
52  zha_data = get_zha_data(hass)
53  entities_to_create = zha_data.platforms[Platform.ALARM_CONTROL_PANEL]
54 
56  hass,
57  SIGNAL_ADD_ENTITIES,
58  functools.partial(
59  zha_async_add_entities,
60  async_add_entities,
61  ZHAAlarmControlPanel,
62  entities_to_create,
63  ),
64  )
65  config_entry.async_on_unload(unsub)
66 
67 
69  """Entity for ZHA alarm control devices."""
70 
71  _attr_translation_key: str = "alarm_control_panel"
72  _attr_code_format = CodeFormat.TEXT
73  _attr_supported_features = (
74  AlarmControlPanelEntityFeature.ARM_HOME
75  | AlarmControlPanelEntityFeature.ARM_AWAY
76  | AlarmControlPanelEntityFeature.ARM_NIGHT
77  | AlarmControlPanelEntityFeature.TRIGGER
78  )
79 
80  @property
81  def code_arm_required(self) -> bool:
82  """Whether the code is required for arm actions."""
83  return self.entity_data.entity.code_arm_required
84 
85  @convert_zha_error_to_ha_error
86  async def async_alarm_disarm(self, code: str | None = None) -> None:
87  """Send disarm command."""
88  await self.entity_data.entity.async_alarm_disarm(code)
89  self.async_write_ha_stateasync_write_ha_state()
90 
91  @convert_zha_error_to_ha_error
92  async def async_alarm_arm_home(self, code: str | None = None) -> None:
93  """Send arm home command."""
94  await self.entity_data.entity.async_alarm_arm_home(code)
95  self.async_write_ha_stateasync_write_ha_state()
96 
97  @convert_zha_error_to_ha_error
98  async def async_alarm_arm_away(self, code: str | None = None) -> None:
99  """Send arm away command."""
100  await self.entity_data.entity.async_alarm_arm_away(code)
101  self.async_write_ha_stateasync_write_ha_state()
102 
103  @convert_zha_error_to_ha_error
104  async def async_alarm_arm_night(self, code: str | None = None) -> None:
105  """Send arm night command."""
106  await self.entity_data.entity.async_alarm_arm_night(code)
107  self.async_write_ha_stateasync_write_ha_state()
108 
109  @convert_zha_error_to_ha_error
110  async def async_alarm_trigger(self, code: str | None = None) -> None:
111  """Send alarm trigger command."""
112  await self.entity_data.entity.async_alarm_trigger(code)
113  self.async_write_ha_stateasync_write_ha_state()
114 
115  @property
116  def alarm_state(self) -> AlarmControlPanelState | None:
117  """Return the state of the entity."""
118  return ZHA_STATE_TO_ALARM_STATE_MAP.get(self.entity_data.entity.state["state"])
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
HAZHAData get_zha_data(HomeAssistant hass)
Definition: helpers.py:1020
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103