1 """Support for AlarmDecoder-based alarm control panels (Honeywell/DSC)."""
3 from __future__
import annotations
5 import voluptuous
as vol
8 AlarmControlPanelEntity,
9 AlarmControlPanelEntityFeature,
10 AlarmControlPanelState,
20 from .
import AlarmDecoderConfigEntry
24 CONF_CODE_ARM_REQUIRED,
29 from .entity
import AlarmDecoderEntity
31 SERVICE_ALARM_TOGGLE_CHIME =
"alarm_toggle_chime"
33 SERVICE_ALARM_KEYPRESS =
"alarm_keypress"
34 ATTR_KEYPRESS =
"keypress"
39 entry: AlarmDecoderConfigEntry,
40 async_add_entities: AddEntitiesCallback,
42 """Set up for AlarmDecoder alarm panels."""
43 options = entry.options
44 arm_options = options.get(OPTIONS_ARM, DEFAULT_ARM_OPTIONS)
47 client=entry.runtime_data.client,
48 auto_bypass=arm_options[CONF_AUTO_BYPASS],
49 code_arm_required=arm_options[CONF_CODE_ARM_REQUIRED],
50 alt_night_mode=arm_options[CONF_ALT_NIGHT_MODE],
54 platform = entity_platform.async_get_current_platform()
55 platform.async_register_entity_service(
56 SERVICE_ALARM_TOGGLE_CHIME,
58 vol.Required(ATTR_CODE): cv.string,
63 platform.async_register_entity_service(
64 SERVICE_ALARM_KEYPRESS,
66 vol.Required(ATTR_KEYPRESS): cv.string,
73 """Representation of an AlarmDecoder-based alarm panel."""
75 _attr_name =
"Alarm Panel"
76 _attr_should_poll =
False
77 _attr_code_format = CodeFormat.NUMBER
78 _attr_supported_features = (
79 AlarmControlPanelEntityFeature.ARM_HOME
80 | AlarmControlPanelEntityFeature.ARM_AWAY
81 | AlarmControlPanelEntityFeature.ARM_NIGHT
84 def __init__(self, client, auto_bypass, code_arm_required, alt_night_mode):
85 """Initialize the alarm panel."""
93 """Register callbacks."""
101 """Handle received messages."""
102 if message.alarm_sounding
or message.fire_alarm:
104 elif message.armed_away:
106 elif message.armed_home
and (message.entry_delay_off
or message.perimeter_only):
108 elif message.armed_home:
114 "ac_power": message.ac_power,
115 "alarm_event_occurred": message.alarm_event_occurred,
116 "backlight_on": message.backlight_on,
117 "battery_low": message.battery_low,
118 "check_zone": message.check_zone,
119 "chime": message.chime_on,
120 "entry_delay_off": message.entry_delay_off,
121 "programming_mode": message.programming_mode,
122 "ready": message.ready,
123 "zone_bypassed": message.zone_bypassed,
128 """Send disarm command."""
130 self.
_client_client.send(f
"{code!s}1")
133 """Send arm away command."""
141 """Send arm home command."""
149 """Send arm night command."""
158 """Send toggle chime command."""
160 self.
_client_client.send(f
"{code!s}9")
163 """Send custom keypresses."""
165 self.
_client_client.send(keypress)
def alarm_keypress(self, keypress)
None alarm_arm_home(self, str|None code=None)
def _message_callback(self, message)
None alarm_arm_away(self, str|None code=None)
None alarm_arm_night(self, str|None code=None)
_attr_extra_state_attributes
None async_added_to_hass(self)
None alarm_disarm(self, str|None code=None)
def alarm_toggle_chime(self, code=None)
def __init__(self, client, auto_bypass, code_arm_required, alt_night_mode)
None async_on_remove(self, CALLBACK_TYPE func)
None schedule_update_ha_state(self, bool force_refresh=False)
None async_setup_entry(HomeAssistant hass, AlarmDecoderConfigEntry entry, AddEntitiesCallback async_add_entities)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)