Template Alarm triggers actions when value changes externally

I have a template alarm configured to manage multiple MQTT-based alarm zones with a single alarm keyboard:

- platform: template
  panels:
    alarm:
      code_arm_required: false
      name: Alarm
      value_template: "{{ 
        'triggered'   if is_state('alarm_control_panel.dom', 'triggered' )
                      or is_state('alarm_control_panel.podworko', 'triggered' )
                      or is_state('alarm_control_panel.obwod', 'triggered') 
                      or is_state('alarm_control_panel.okna', 'triggered') 
                      else
        'armed_away'  if is_state('alarm_control_panel.dom', 'armed_home' )
                      else
        'armed_home'  if is_state('alarm_control_panel.obwod', 'armed_home')
                      else
        'disarmed'    if is_state('alarm_control_panel.dom', 'disarmed' )
                      and is_state('alarm_control_panel.podworko', 'disarmed' )
                      and is_state('alarm_control_panel.okna', 'disarmed')
                      else
        'arming'      if is_state('alarm_control_panel.dom', 'arming' )
                      or is_state('alarm_control_panel.podworko', 'arming' )
                      or is_state('alarm_control_panel.obwod', 'arming') 
                      or is_state('alarm_control_panel.okna', 'arming')
                      else
        'pending'     if is_state('alarm_control_panel.dom', 'pending' )
                      or is_state('alarm_control_panel.podworko', 'pending' )
                      or is_state('alarm_control_panel.obwod', 'pending') 
                      or is_state('alarm_control_panel.okna', 'pending')
                      else
        'unknown'
        }}"

      arm_away:
      - service: alarm_control_panel.alarm_arm_home
        data:
          entity_id: alarm_control_panel.dom
          code: !secret satel_pin      
      - service: alarm_control_panel.alarm_arm_home
        data:
          entity_id: alarm_control_panel.podworko
          code: !secret satel_pin

      arm_home:
      - service: alarm_control_panel.alarm_disarm
        data:
          entity_id: alarm_control_panel.dom
          code: !secret satel_pin
      - service: alarm_control_panel.alarm_arm_home
        data:
          entity_id: alarm_control_panel.podworko
          code: !secret satel_pin
          
      disarm:
      - service: alarm_control_panel.alarm_disarm
        data:
          entity_id: alarm_control_panel.dom
          code: !secret satel_pin
      - service: alarm_control_panel.alarm_disarm
        data:
          entity_id: alarm_control_panel.podworko
          code: !secret satel_pin
      - service: alarm_control_panel.alarm_disarm
        data:
          entity_id: alarm_control_panel.okna
          code: !secret satel_pin

However it looks like whenever the the state of the zones changes externally (eg. from the physical alarm device) - so the value calculated by value_template changes - it triggers appropriate actions defined in the config (disarm, arm_home, etc).
So basically Home Assistant listens to the changes but also follows and triggers the same actions from the alarm config.

It messes up my setup because it disturbs the arming procedure and also makes problems since my satel integration sends short misleading values, eg. arming for 30s, disarmed followed immediately by armed_away.

Is this by design?

I did not notice this behaviour for other components. Eg. externally changed MQTT switch state does not follow the changes by sending commands to command_topic.

I thought only actions triggered by the component itself should execute defined actions.

1 Like

Hmm, i’m not familiar with HA code (yet :wink:) but as far as I can see it in the source code it should not behave like that.
I need to check if it’s not something in my automations or Node Red flows.

EDIT: as suspected. Problem was in my Node Red flows. Case closed :wink: