mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Add vacation mode to Template Alarm Control Panel (#74261)
This commit is contained in:
parent
7656ca8313
commit
24d2d62121
@ -21,6 +21,7 @@ from homeassistant.const import (
|
||||
STATE_ALARM_ARMED_AWAY,
|
||||
STATE_ALARM_ARMED_HOME,
|
||||
STATE_ALARM_ARMED_NIGHT,
|
||||
STATE_ALARM_ARMED_VACATION,
|
||||
STATE_ALARM_ARMING,
|
||||
STATE_ALARM_DISARMED,
|
||||
STATE_ALARM_PENDING,
|
||||
@ -43,6 +44,7 @@ _VALID_STATES = [
|
||||
STATE_ALARM_ARMED_AWAY,
|
||||
STATE_ALARM_ARMED_HOME,
|
||||
STATE_ALARM_ARMED_NIGHT,
|
||||
STATE_ALARM_ARMED_VACATION,
|
||||
STATE_ALARM_ARMING,
|
||||
STATE_ALARM_DISARMED,
|
||||
STATE_ALARM_PENDING,
|
||||
@ -53,6 +55,7 @@ _VALID_STATES = [
|
||||
CONF_ARM_AWAY_ACTION = "arm_away"
|
||||
CONF_ARM_HOME_ACTION = "arm_home"
|
||||
CONF_ARM_NIGHT_ACTION = "arm_night"
|
||||
CONF_ARM_VACATION_ACTION = "arm_vacation"
|
||||
CONF_DISARM_ACTION = "disarm"
|
||||
CONF_ALARM_CONTROL_PANELS = "panels"
|
||||
CONF_CODE_ARM_REQUIRED = "code_arm_required"
|
||||
@ -74,6 +77,7 @@ ALARM_CONTROL_PANEL_SCHEMA = vol.Schema(
|
||||
vol.Optional(CONF_ARM_AWAY_ACTION): cv.SCRIPT_SCHEMA,
|
||||
vol.Optional(CONF_ARM_HOME_ACTION): cv.SCRIPT_SCHEMA,
|
||||
vol.Optional(CONF_ARM_NIGHT_ACTION): cv.SCRIPT_SCHEMA,
|
||||
vol.Optional(CONF_ARM_VACATION_ACTION): cv.SCRIPT_SCHEMA,
|
||||
vol.Optional(CONF_CODE_ARM_REQUIRED, default=True): cv.boolean,
|
||||
vol.Optional(CONF_CODE_FORMAT, default=TemplateCodeFormat.number.name): cv.enum(
|
||||
TemplateCodeFormat
|
||||
@ -157,6 +161,9 @@ class AlarmControlPanelTemplate(TemplateEntity, AlarmControlPanelEntity):
|
||||
self._arm_night_script = None
|
||||
if (arm_night_action := config.get(CONF_ARM_NIGHT_ACTION)) is not None:
|
||||
self._arm_night_script = Script(hass, arm_night_action, name, DOMAIN)
|
||||
self._arm_vacation_script = None
|
||||
if (arm_vacation_action := config.get(CONF_ARM_VACATION_ACTION)) is not None:
|
||||
self._arm_vacation_script = Script(hass, arm_vacation_action, name, DOMAIN)
|
||||
|
||||
self._state: str | None = None
|
||||
|
||||
@ -184,6 +191,11 @@ class AlarmControlPanelTemplate(TemplateEntity, AlarmControlPanelEntity):
|
||||
supported_features | AlarmControlPanelEntityFeature.ARM_AWAY
|
||||
)
|
||||
|
||||
if self._arm_vacation_script is not None:
|
||||
supported_features = (
|
||||
supported_features | AlarmControlPanelEntityFeature.ARM_VACATION
|
||||
)
|
||||
|
||||
return supported_features
|
||||
|
||||
@property
|
||||
@ -257,6 +269,12 @@ class AlarmControlPanelTemplate(TemplateEntity, AlarmControlPanelEntity):
|
||||
STATE_ALARM_ARMED_NIGHT, script=self._arm_night_script, code=code
|
||||
)
|
||||
|
||||
async def async_alarm_arm_vacation(self, code: str | None = None) -> None:
|
||||
"""Arm the panel to Vacation."""
|
||||
await self._async_alarm_arm(
|
||||
STATE_ALARM_ARMED_VACATION, script=self._arm_vacation_script, code=code
|
||||
)
|
||||
|
||||
async def async_alarm_disarm(self, code: str | None = None) -> None:
|
||||
"""Disarm the panel."""
|
||||
await self._async_alarm_arm(
|
||||
|
@ -10,6 +10,7 @@ from homeassistant.const import (
|
||||
STATE_ALARM_ARMED_AWAY,
|
||||
STATE_ALARM_ARMED_HOME,
|
||||
STATE_ALARM_ARMED_NIGHT,
|
||||
STATE_ALARM_ARMED_VACATION,
|
||||
STATE_ALARM_ARMING,
|
||||
STATE_ALARM_DISARMED,
|
||||
STATE_ALARM_PENDING,
|
||||
@ -56,6 +57,11 @@ OPTIMISTIC_TEMPLATE_ALARM_CONFIG = {
|
||||
"entity_id": "alarm_control_panel.test",
|
||||
"data": {"code": "{{ this.entity_id }}"},
|
||||
},
|
||||
"arm_vacation": {
|
||||
"service": "alarm_control_panel.alarm_arm_vacation",
|
||||
"entity_id": "alarm_control_panel.test",
|
||||
"data": {"code": "{{ this.entity_id }}"},
|
||||
},
|
||||
"disarm": {
|
||||
"service": "alarm_control_panel.alarm_disarm",
|
||||
"entity_id": "alarm_control_panel.test",
|
||||
@ -89,6 +95,7 @@ async def test_template_state_text(hass, start_ha):
|
||||
STATE_ALARM_ARMED_HOME,
|
||||
STATE_ALARM_ARMED_AWAY,
|
||||
STATE_ALARM_ARMED_NIGHT,
|
||||
STATE_ALARM_ARMED_VACATION,
|
||||
STATE_ALARM_ARMING,
|
||||
STATE_ALARM_DISARMED,
|
||||
STATE_ALARM_PENDING,
|
||||
@ -128,6 +135,7 @@ async def test_optimistic_states(hass, start_ha):
|
||||
("alarm_arm_away", STATE_ALARM_ARMED_AWAY),
|
||||
("alarm_arm_home", STATE_ALARM_ARMED_HOME),
|
||||
("alarm_arm_night", STATE_ALARM_ARMED_NIGHT),
|
||||
("alarm_arm_vacation", STATE_ALARM_ARMED_VACATION),
|
||||
("alarm_disarm", STATE_ALARM_DISARMED),
|
||||
]:
|
||||
await hass.services.async_call(
|
||||
@ -250,6 +258,7 @@ async def test_name(hass, start_ha):
|
||||
"alarm_arm_home",
|
||||
"alarm_arm_away",
|
||||
"alarm_arm_night",
|
||||
"alarm_arm_vacation",
|
||||
"alarm_disarm",
|
||||
],
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user