Template Alarm Control Panel
The template alarm control panel platform allows you to turn your binary sensors into a state machine
managed alarm control panel.
# Example configuration entry
alarm_control_panel:
  - platform: template
    name: Alarm Panel
    codes:
      - "1234"
    binary_sensors:
      - input: zone_1
      - input: zone_2
        bypass_armed_home: trueConfiguration variables
- codes (Optional, list of string): A list of codes for disarming the alarm, if requires_code_to_arm set to true then for arming the alarm too. 
- requires_code_to_arm (Optional, boolean): Code required for arming the alarm, codes must be provided. 
- arming_away_time (Optional, Time): The exit delay before the alarm is armed to away mode. Defaults to - 0s.
- arming_home_time (Optional, Time): The exit delay before the alarm is armed to home mode. 
- arming_night_time (Optional, Time): The exit delay before the alarm is armed to night mode. 
- pending_time (Optional, Time): The entry delay before the alarm is triggered. Defaults to - 0s.
- trigger_time (Optional, Time): The time after a triggered alarm before resetting to previous state if the sensors are cleared/off. Defaults to - 0s.
- binary_sensors (Optional, list): A list of binary sensors the panel should use. Each consists of: - input (Required, string): The id of the binary sensor component
- bypass_armed_home (Optional, boolean): This binary sensor will not trigger the alarm when in
armed_homestate.
- bypass_armed_night (Optional, boolean): This binary sensor will not trigger the alarm when in armed_nightstate.
- bypass_auto (Optional, boolean): This binary sensor will be automatically bypassed if left on/open at the time of arming.
- trigger_mode (Optional, string): Sets the trigger mode for this sensor. One of delayed,instant,instant_always, ordelayed_follower. (delayedis the default if not specified)
- chime (Optional, boolean): When set true, the chime callback will be called whenever the sensor goes from closed to open. (falseis the default if not specified)
 
- restore_mode (Optional, enum): - ALWAYS_DISARMED(Default): Always start in- disarmedstate.
- RESTORE_DEFAULT_DISARMED: Restore state or default to- disarmedstate if no saved state was found.
 
- All other options from Alarm Control Panel 
ℹ️ Note
If
binary_sensorsis omitted then you’re expected to trigger the alarm usingpendingAction ortriggeredAction.
Trigger Modes
Each binary sensor “zone” supports 4 trigger modes. The modes are:
- delayed
- instant
- instant_always
- delayed_follower
The delayed trigger mode is typically specified for exterior doors where entry is required to access an alarm keypad
or other arm/disarm method. If the alarm panel is armed, and a zone set to delayed is “faulted” (i.e. the zone state
is true ) the alarm state will change from the armed state to the pending state. During the pending state, the
user has a preset time to disarm the alarm before it changes to the triggered state. This is the default trigger mode
if not specified.
The instant trigger mode is typically used for exterior zones (e.g. windows, and glass break detectors). If the alarm
control panel is armed, a fault on this type of zone will cause the alarm to go from the armed state directly to the
triggered state.
The instant_always trigger mode is typically used for tamper inputs. Irrespective of whether the alarm control panel
is armed, a fault will always cause the alarm to go directly to the triggered state.
The delayed_follower trigger mode is typically specifed for interior passive infared (PIR) or microwave sensors. One
of two things happen when a delayed_follower zone is faulted:
- When the alarm panel is in the armed state, a fault on a zone with - delayed_followerspecified will cause the alarm control panel to go directly to the- triggeredstate.
- When the alarm panel is in the pending state, a fault on a zone with - delayed_followerspecified will remain in the- pendingstate.
The delayed_follower trigger mode offers better protection if someone enters a premises via an unprotected window
or door. If there is a PIR guarding the main hallway, it will cause an instant trigger of the alarm panel as someone
entered the premises in a unusual manner. Likewise, if someone enters the premises though a door set to the delayed
trigger mode, and then triggers the PIR, the alarm will stay in the pending state until either they disarm the alarm,
or the pending timer expires.
State Flow
- The alarm starts in - DISARMEDstate
- When the - arm_...method is invoked- arming_..._timeis greater than 0 the state is- ARMING
- arming_..._timeis 0 or after the delay the state is- ARMED_...
 
- When the alarm is tripped by a sensor state changing to - onor- alarm_control_panel_pending_actioninvoked
- If - trigger_modeis set to- delayed:- pending_timegreater than 0 the state is- PENDING
- pending_timeis 0 or after the- pending_timedelay the state is- TRIGGERED
 
- If - trigger_modeis set to- instantor- instant_always:- The state is set to TRIGGERED
 
- The state is set to 
- If the - trigger_modeis set to- interior_follower:- If the current state is ARMED_...the state will be set toTRIGGERED
- If the current state is PENDINGthen nothing will happen and it will stay in thePENDINGstate.
 
- If the current state is 
- If - trigger_timegreater than 0 and no sensors are- onafter- trigger_timedelay the state returns to- ARM_...
ℹ️ Note
Although the interface supports all arming modes only
away,homeandnighthave been implemented for now.arm_...is for eitherarm_awayorarm_homearming_..._timeis for eitherarming_away_time,arming_home_time, orarming_night_timeARMED_...is for eitherARMED_AWAY,ARMED_HOME, orARMED_NIGHT
Example
alarm_control_panel:
  platform: template
  name: Alarm Panel
  id: acp1
  codes:
    - "1234"
  requires_code_to_arm: true
  arming_away_time: 30s
  arming_home_time: 5s
  pending_time: 30s
  trigger_time: 5min
  binary_sensors:
    - input: zone_1
      chime: true
      trigger_mode: delayed
    - input: zone_2
      chime: true
      trigger_mode: delayed
    - input: zone_3
      bypass_armed_home: true
      trigger_mode: delayed_follower
    - input: zone_3_tamper
      trigger_mode: instant_always
    - input: zone_4
      trigger_mode: instant
    - input: ha_test
  on_state:
    then:
      - lambda: !lambda |-
          ESP_LOGD("TEST", "State change %s", alarm_control_panel_state_to_string(id(acp1)->get_state()));
  on_triggered:
    then:
      - switch.turn_on: siren
  on_cleared:
    then:
      - switch.turn_off: siren
  on_ready:
    then:
     - lambda: !lambda |-
         ESP_LOGD("TEST", "Sensor ready change to: %s",
           (id(acp1).get_all_sensors_ready())) ? (const char *) "True" : (const char *) "False");
  on_chime:
    then:
     - lambda: !lambda |-
         ESP_LOGD("TEST", "Zone with chime mode set opened");
binary_sensor:
  - platform: gpio
    id: zone_1
    name: Zone 1
    device_class: door
    pin:
      number: GPIOXX
      mode: INPUT_PULLUP
      inverted: True
  - platform: gpio
    id: zone_2
    name: Zone 2
    device_class: door
    pin:
      number: GPIOXX
      mode: INPUT_PULLUP
      inverted: True
  - platform: gpio
    id: zone_3
    name: Zone 3
    device_class: motion
    pin:
      number: GPIOXX
      mode: INPUT_PULLUP
      inverted: True
  - platform: gpio
    id: zone_3_tamper
    name: Zone 3 Tamper
    device_class: tamper
    pin:
      number: GPIOXX
      mode: INPUT_PULLUP
      inverted: True
  - platform: gpio
    id: zone_4
    name: Zone 4
    device_class: door
    pin:
      number: GPIOXX
      mode: INPUT_PULLUP
      inverted: True
  - platform: homeassistant
    id: ha_test
    name: HA Test
    entity_id: input_boolean.test_switch
switch:
  - platform: gpio
    id: siren
    name: Siren
    icon: mdi:alarm-bell
    pin: GPIOXX