2121from homeassistant .config_entries import ConfigEntry
2222from homeassistant .const import (
2323 ATTR_CODE ,
24- CONF_DEVICE_ID ,
2524 CONF_NAME ,
2625 CONF_STATE ,
2726 CONF_UNIQUE_ID ,
3130)
3231from homeassistant .core import HomeAssistant , callback
3332from homeassistant .exceptions import TemplateError
34- from homeassistant .helpers import config_validation as cv , selector , template
33+ from homeassistant .helpers import config_validation as cv , template
3534from homeassistant .helpers .entity_platform import (
3635 AddConfigEntryEntitiesCallback ,
3736 AddEntitiesCallback ,
4342from .const import DOMAIN
4443from .coordinator import TriggerUpdateCoordinator
4544from .entity import AbstractTemplateEntity
46- from .helpers import async_setup_template_platform
47- from .template_entity import TemplateEntity , make_template_entity_common_modern_schema
45+ from .helpers import (
46+ async_setup_template_entry ,
47+ async_setup_template_platform ,
48+ async_setup_template_preview ,
49+ )
50+ from .template_entity import (
51+ TEMPLATE_ENTITY_COMMON_CONFIG_ENTRY_SCHEMA ,
52+ TemplateEntity ,
53+ make_template_entity_common_modern_schema ,
54+ )
4855from .trigger_entity import TriggerEntity
4956
5057_LOGGER = logging .getLogger (__name__ )
@@ -88,27 +95,7 @@ class TemplateCodeFormat(Enum):
8895
8996DEFAULT_NAME = "Template Alarm Control Panel"
9097
91- ALARM_CONTROL_PANEL_SCHEMA = vol .All (
92- vol .Schema (
93- {
94- vol .Optional (CONF_ARM_AWAY_ACTION ): cv .SCRIPT_SCHEMA ,
95- vol .Optional (CONF_ARM_CUSTOM_BYPASS_ACTION ): cv .SCRIPT_SCHEMA ,
96- vol .Optional (CONF_ARM_HOME_ACTION ): cv .SCRIPT_SCHEMA ,
97- vol .Optional (CONF_ARM_NIGHT_ACTION ): cv .SCRIPT_SCHEMA ,
98- vol .Optional (CONF_ARM_VACATION_ACTION ): cv .SCRIPT_SCHEMA ,
99- vol .Optional (CONF_CODE_ARM_REQUIRED , default = True ): cv .boolean ,
100- vol .Optional (
101- CONF_CODE_FORMAT , default = TemplateCodeFormat .number .name
102- ): cv .enum (TemplateCodeFormat ),
103- vol .Optional (CONF_DISARM_ACTION ): cv .SCRIPT_SCHEMA ,
104- vol .Optional (CONF_STATE ): cv .template ,
105- vol .Optional (CONF_TRIGGER_ACTION ): cv .SCRIPT_SCHEMA ,
106- }
107- ).extend (make_template_entity_common_modern_schema (DEFAULT_NAME ).schema )
108- )
109-
110-
111- LEGACY_ALARM_CONTROL_PANEL_SCHEMA = vol .Schema (
98+ ALARM_CONTROL_PANEL_COMMON_SCHEMA = vol .Schema (
11299 {
113100 vol .Optional (CONF_ARM_AWAY_ACTION ): cv .SCRIPT_SCHEMA ,
114101 vol .Optional (CONF_ARM_CUSTOM_BYPASS_ACTION ): cv .SCRIPT_SCHEMA ,
@@ -120,22 +107,16 @@ class TemplateCodeFormat(Enum):
120107 TemplateCodeFormat
121108 ),
122109 vol .Optional (CONF_DISARM_ACTION ): cv .SCRIPT_SCHEMA ,
123- vol .Optional (CONF_NAME ): cv .string ,
110+ vol .Optional (CONF_STATE ): cv .template ,
124111 vol .Optional (CONF_TRIGGER_ACTION ): cv .SCRIPT_SCHEMA ,
125- vol .Optional (CONF_UNIQUE_ID ): cv .string ,
126- vol .Optional (CONF_VALUE_TEMPLATE ): cv .template ,
127112 }
128113)
129114
130- PLATFORM_SCHEMA = ALARM_CONTROL_PANEL_PLATFORM_SCHEMA .extend (
131- {
132- vol .Required (CONF_ALARM_CONTROL_PANELS ): cv .schema_with_slug_keys (
133- LEGACY_ALARM_CONTROL_PANEL_SCHEMA
134- ),
135- }
115+ ALARM_CONTROL_PANEL_YAML_SCHEMA = ALARM_CONTROL_PANEL_COMMON_SCHEMA .extend (
116+ make_template_entity_common_modern_schema (DEFAULT_NAME ).schema
136117)
137118
138- ALARM_CONTROL_PANEL_CONFIG_SCHEMA = vol .Schema (
119+ ALARM_CONTROL_PANEL_LEGACY_YAML_SCHEMA = vol .Schema (
139120 {
140121 vol .Optional (CONF_ARM_AWAY_ACTION ): cv .SCRIPT_SCHEMA ,
141122 vol .Optional (CONF_ARM_CUSTOM_BYPASS_ACTION ): cv .SCRIPT_SCHEMA ,
@@ -146,23 +127,25 @@ class TemplateCodeFormat(Enum):
146127 vol .Optional (CONF_CODE_FORMAT , default = TemplateCodeFormat .number .name ): cv .enum (
147128 TemplateCodeFormat
148129 ),
149- vol .Optional (CONF_DEVICE_ID ): selector .DeviceSelector (),
150130 vol .Optional (CONF_DISARM_ACTION ): cv .SCRIPT_SCHEMA ,
151- vol .Required (CONF_NAME ): cv .template ,
152- vol .Optional (CONF_STATE ): cv .template ,
131+ vol .Optional (CONF_NAME ): cv .string ,
153132 vol .Optional (CONF_TRIGGER_ACTION ): cv .SCRIPT_SCHEMA ,
133+ vol .Optional (CONF_UNIQUE_ID ): cv .string ,
134+ vol .Optional (CONF_VALUE_TEMPLATE ): cv .template ,
154135 }
155136)
156137
138+ PLATFORM_SCHEMA = ALARM_CONTROL_PANEL_PLATFORM_SCHEMA .extend (
139+ {
140+ vol .Required (CONF_ALARM_CONTROL_PANELS ): cv .schema_with_slug_keys (
141+ ALARM_CONTROL_PANEL_LEGACY_YAML_SCHEMA
142+ ),
143+ }
144+ )
157145
158- def rewrite_options_to_modern_conf (option_config : dict [str , dict ]) -> dict [str , dict ]:
159- """Rewrite option configuration to modern configuration."""
160- option_config = {** option_config }
161-
162- if CONF_VALUE_TEMPLATE in option_config :
163- option_config [CONF_STATE ] = option_config .pop (CONF_VALUE_TEMPLATE )
164-
165- return option_config
146+ ALARM_CONTROL_PANEL_CONFIG_ENTRY_SCHEMA = ALARM_CONTROL_PANEL_COMMON_SCHEMA .extend (
147+ TEMPLATE_ENTITY_COMMON_CONFIG_ENTRY_SCHEMA .schema
148+ )
166149
167150
168151async def async_setup_entry (
@@ -171,18 +154,13 @@ async def async_setup_entry(
171154 async_add_entities : AddConfigEntryEntitiesCallback ,
172155) -> None :
173156 """Initialize config entry."""
174- _options = dict (config_entry .options )
175- _options .pop ("template_type" )
176- _options = rewrite_options_to_modern_conf (_options )
177- validated_config = ALARM_CONTROL_PANEL_CONFIG_SCHEMA (_options )
178- async_add_entities (
179- [
180- StateAlarmControlPanelEntity (
181- hass ,
182- validated_config ,
183- config_entry .entry_id ,
184- )
185- ]
157+ await async_setup_template_entry (
158+ hass ,
159+ config_entry ,
160+ async_add_entities ,
161+ StateAlarmControlPanelEntity ,
162+ ALARM_CONTROL_PANEL_CONFIG_ENTRY_SCHEMA ,
163+ True ,
186164 )
187165
188166
@@ -211,11 +189,14 @@ def async_create_preview_alarm_control_panel(
211189 hass : HomeAssistant , name : str , config : dict [str , Any ]
212190) -> StateAlarmControlPanelEntity :
213191 """Create a preview alarm control panel."""
214- updated_config = rewrite_options_to_modern_conf (config )
215- validated_config = ALARM_CONTROL_PANEL_CONFIG_SCHEMA (
216- updated_config | {CONF_NAME : name }
192+ return async_setup_template_preview (
193+ hass ,
194+ name ,
195+ config ,
196+ StateAlarmControlPanelEntity ,
197+ ALARM_CONTROL_PANEL_CONFIG_ENTRY_SCHEMA ,
198+ True ,
217199 )
218- return StateAlarmControlPanelEntity (hass , validated_config , None )
219200
220201
221202class AbstractTemplateAlarmControlPanel (
0 commit comments