1 """Support for ESPHome Alarm Control Panel."""
3 from __future__
import annotations
5 from functools
import partial
7 from aioesphomeapi
import (
8 AlarmControlPanelCommand,
9 AlarmControlPanelEntityState
as ESPHomeAlarmControlPanelEntityState,
10 AlarmControlPanelInfo,
11 AlarmControlPanelState
as ESPHomeAlarmControlPanelState,
17 AlarmControlPanelEntity,
18 AlarmControlPanelEntityFeature,
19 AlarmControlPanelState,
26 convert_api_error_ha_error,
27 esphome_state_property,
28 platform_async_setup_entry,
30 from .enum_mapper
import EsphomeEnumMapper
32 _ESPHOME_ACP_STATE_TO_HASS_STATE: EsphomeEnumMapper[
33 ESPHomeAlarmControlPanelState, AlarmControlPanelState
36 ESPHomeAlarmControlPanelState.DISARMED: AlarmControlPanelState.DISARMED,
37 ESPHomeAlarmControlPanelState.ARMED_HOME: AlarmControlPanelState.ARMED_HOME,
38 ESPHomeAlarmControlPanelState.ARMED_AWAY: AlarmControlPanelState.ARMED_AWAY,
39 ESPHomeAlarmControlPanelState.ARMED_NIGHT: AlarmControlPanelState.ARMED_NIGHT,
40 ESPHomeAlarmControlPanelState.ARMED_VACATION: AlarmControlPanelState.ARMED_VACATION,
41 ESPHomeAlarmControlPanelState.ARMED_CUSTOM_BYPASS: AlarmControlPanelState.ARMED_CUSTOM_BYPASS,
42 ESPHomeAlarmControlPanelState.PENDING: AlarmControlPanelState.PENDING,
43 ESPHomeAlarmControlPanelState.ARMING: AlarmControlPanelState.ARMING,
44 ESPHomeAlarmControlPanelState.DISARMING: AlarmControlPanelState.DISARMING,
45 ESPHomeAlarmControlPanelState.TRIGGERED: AlarmControlPanelState.TRIGGERED,
51 """ESPHome AlarmCintolPanel feature numbers."""
57 ARM_CUSTOM_BYPASS = 16
62 EsphomeEntity[AlarmControlPanelInfo, ESPHomeAlarmControlPanelEntityState],
63 AlarmControlPanelEntity,
65 """An Alarm Control Panel implementation for ESPHome."""
69 """Set attrs from static info."""
73 if static_info.supported_features & EspHomeACPFeatures.ARM_HOME:
74 feature |= AlarmControlPanelEntityFeature.ARM_HOME
75 if static_info.supported_features & EspHomeACPFeatures.ARM_AWAY:
76 feature |= AlarmControlPanelEntityFeature.ARM_AWAY
77 if static_info.supported_features & EspHomeACPFeatures.ARM_NIGHT:
78 feature |= AlarmControlPanelEntityFeature.ARM_NIGHT
79 if static_info.supported_features & EspHomeACPFeatures.TRIGGER:
80 feature |= AlarmControlPanelEntityFeature.TRIGGER
81 if static_info.supported_features & EspHomeACPFeatures.ARM_CUSTOM_BYPASS:
82 feature |= AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS
83 if static_info.supported_features & EspHomeACPFeatures.ARM_VACATION:
84 feature |= AlarmControlPanelEntityFeature.ARM_VACATION
87 CodeFormat.NUMBER
if static_info.requires_code
else None
92 @esphome_state_property
94 """Return the state of the device."""
95 return _ESPHOME_ACP_STATE_TO_HASS_STATE.from_esphome(self.
_state_state.state)
97 @convert_api_error_ha_error
99 """Send disarm command."""
100 self.
_client_client.alarm_control_panel_command(
101 self.
_key_key, AlarmControlPanelCommand.DISARM, code
104 @convert_api_error_ha_error
106 """Send arm home command."""
107 self.
_client_client.alarm_control_panel_command(
108 self.
_key_key, AlarmControlPanelCommand.ARM_HOME, code
111 @convert_api_error_ha_error
113 """Send arm away command."""
114 self.
_client_client.alarm_control_panel_command(
115 self.
_key_key, AlarmControlPanelCommand.ARM_AWAY, code
118 @convert_api_error_ha_error
120 """Send arm away command."""
121 self.
_client_client.alarm_control_panel_command(
122 self.
_key_key, AlarmControlPanelCommand.ARM_NIGHT, code
125 @convert_api_error_ha_error
127 """Send arm away command."""
128 self.
_client_client.alarm_control_panel_command(
129 self.
_key_key, AlarmControlPanelCommand.ARM_CUSTOM_BYPASS, code
132 @convert_api_error_ha_error
134 """Send arm away command."""
135 self.
_client_client.alarm_control_panel_command(
136 self.
_key_key, AlarmControlPanelCommand.ARM_VACATION, code
139 @convert_api_error_ha_error
141 """Send alarm trigger command."""
142 self.
_client_client.alarm_control_panel_command(
143 self.
_key_key, AlarmControlPanelCommand.TRIGGER, code
147 async_setup_entry = partial(
148 platform_async_setup_entry,
149 info_type=AlarmControlPanelInfo,
150 entity_type=EsphomeAlarmControlPanel,
151 state_type=ESPHomeAlarmControlPanelEntityState,
AlarmControlPanelEntityFeature
None async_alarm_arm_away(self, str|None code=None)
None async_alarm_arm_custom_bypass(self, str|None code=None)
None async_alarm_trigger(self, str|None code=None)
None async_alarm_arm_night(self, str|None code=None)
None async_alarm_arm_home(self, str|None code=None)
AlarmControlPanelState|None alarm_state(self)
None async_alarm_arm_vacation(self, str|None code=None)
None _on_static_info_update(self, EntityInfo static_info)
None async_alarm_disarm(self, str|None code=None)