Template Alarm control panel


The template integrations creates alarm control panels that combine integrations or adds preprocessing logic to actions.

There are several powerful ways to use this integration, including grouping existing integrations into a simpler integrations, or adding logic that Home Assistant will execute when accessed.

For example, if you want to expose a true alarm panel to Google Home, Alexa, or HomeKit - but limit its ability to disarm when there’s no one home, you can do that using a template.

Another use case could be grouping a series of sensors and services together to represent various “armed” and “disarmed” states and actions.

This can simplify the GUI and make it easier to write automations.

In optimistic mode, the alarm control panel will immediately change state after every command. Otherwise, the alarm control panel will wait for state confirmation from the template. Try to enable it, if experiencing incorrect operation.

Configuration

To enable a template alarm control panel in your installation, add the following to your configuration.yaml file:

# Example configuration.yaml entry
alarm_control_panel:
  - platform: template
    panels:
      safe_alarm_panel:
        value_template: "{{ states('alarm_control_panel.real_alarm') }}"
        arm_away:
          service: alarm_control_panel.alarm_arm_away
          target:
            entity_id: alarm_control_panel.real_alarm
          data:
            code: !secret alarm_code
        arm_home:
          service: alarm_control_panel.alarm_arm_home
          target:
            entity_id: alarm_control_panel.real_alarm
          data:
            code: !secret alarm_code
        disarm:
          - condition: state
            entity_id: device_tracker.paulus
            state: "home"
          - service: alarm_control_panel.alarm_disarm
            target:
              entity_id: alarm_control_panel.real_alarm
            data:
              code: !secret alarm_code

Configuration Variables

panels map Required

List of your panels.

alarm_control_panel_name map Required

The slug of the panel.

name string (Optional)

Name to use in the frontend.

Default:

Template Alarm Control Panel

unique_id string (Optional)

An ID that uniquely identifies this alarm control panel. Set this to a unique value to allow customization through the UI.

value_template template (Optional)

Defines a template to set the state of the alarm panel. Only the states armed_away, armed_home, armed_night, armed_vacation, arming, disarmed, pending, triggered and unavailable are used.

disarm action (Optional)

Defines an action to run when the alarm is disarmed.

arm_away action (Optional)

Defines an action to run when the alarm is armed to away mode.

arm_home action (Optional)

Defines an action to run when the alarm is armed to home mode.

arm_night action (Optional)

Defines an action to run when the alarm is armed to night mode.

arm_vacation action (Optional)

Defines an action to run when the alarm is armed to vacation mode.

arm_custom_bypass action (Optional)

Defines an action to run when the alarm is armed to custom bypass mode.

trigger action (Optional)

Defines an action to run when the alarm is triggered.

code_arm_required boolean (Optional, default: true)

If true, the code is required to arm the alarm.

code_format string (Optional, default: number)

One of number, text or no_code. Format for the code used to arm/disarm the alarm.

Template and action variables

State-based template entities have the special template variable this available in their templates and actions. The this variable aids self-referencing of an entity’s state and attribute in templates and actions.

Considerations

If you are using the state of an integration that takes extra time to load, the template alarm control panel may get an unknown state during startup. This results in error messages in your log file until that integration has completed loading. If you use is_state() function in your template, you can avoid this situation.

For example, you would replace {{ states.switch.source.state == 'on' }} with this equivalent that returns true/false and never gives an unknown result: {{ is_state('switch.source', 'on') }}