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.