Update alarm blueprint to allow multiple arm services

This commit is contained in:
aderusha 2021-07-05 16:21:43 -04:00
parent 732df5dd9f
commit fee66e39e7
2 changed files with 105 additions and 23 deletions

View File

@ -47,14 +47,32 @@ blueprint:
max: 10 max: 10
mode: slider mode: slider
unit_of_measurement: digits unit_of_measurement: digits
armservice: b13armservice:
name: "Alarm arm service" name: "Lower-left arm service"
description: 'Enter the alarm service call to issue when the ARM button is pressed. Typically this is one of "alarm_arm_away", "alarm_arm_home", "alarm_arm_night", or "alarm_arm_custom_bypass".' description: "Select the alarm arm service to call when system is armed with the lower-left button"
default: "alarm_arm_home"
selector:
select:
options:
- "alarm_arm_home"
- "alarm_arm_away"
- "alarm_arm_night"
- "alarm_arm_vacation"
- "alarm_arm_custom_bypass"
b15armservice:
name: "Lower-right arm service"
description: "Select the alarm arm service to call when system is armed with the lower-right button"
default: "alarm_arm_away" default: "alarm_arm_away"
selector: selector:
text: select:
options:
- "alarm_arm_home"
- "alarm_arm_away"
- "alarm_arm_night"
- "alarm_arm_vacation"
- "alarm_arm_custom_bypass"
mode: parallel mode: queued
max_exceeded: silent max_exceeded: silent
variables: variables:
@ -67,7 +85,8 @@ variables:
{%- endfor -%} {%- endfor -%}
alarmpanel: !input alarmpanel alarmpanel: !input alarmpanel
codelength: !input codelength codelength: !input codelength
armservice: !input armservice b13armservice: !input b13armservice
b15armservice: !input b15armservice
commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" }}' commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" }}'
jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}' jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}' jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}'
@ -135,10 +154,49 @@ variables:
{%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%}
{%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%}
{{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }}
alarmstate: '{% if states(alarmpanel)|lower == "disarmed" %}disarmed{% elif states(alarmpanel)|lower == "arming" %}arming{% else %}armed{% endif %}'
alarmstate_text: '{% if alarmstate == "disarmed" %}not\\rarmed{% elif alarmstate == "arming" %}arming{% else %}armed{% endif %}' b13text: >-
alarmaction_text: '{% if alarmstate == "disarmed" %}arm{% else %}disarm{% endif %}' {%- if states(alarmpanel) == "disarmed" -%}
armservice_name: '{{"alarm_control_panel." ~ armservice}}' {%- if b13armservice == "alarm_arm_home" -%}
arm\\rhome
{%- elif b13armservice == "alarm_arm_away" -%}
arm\\raway
{%- elif b13armservice == "alarm_arm_night" -%}
arm\\rnight
{%- elif b13armservice == "alarm_arm_vacation" -%}
arm\\rvaca
{%- elif b13armservice == "alarm_arm_custom_bypass" -%}
arm\\rbypass
{%- endif -%}
{%- elif states(alarmpanel) == "arming" -%}
arming
{%- elif states(alarmpanel) == "armed_home" -%}
armed\\rhome
{%- elif states(alarmpanel) == "armed_away" -%}
armed\\raway
{%- elif states(alarmpanel) == "armed_night" -%}
armed\\rnight
{%- elif states(alarmpanel) == "armed_vacation" -%}
armed\\rvaca
{%- elif states(alarmpanel) == "armed_custom_bypass" -%}
armedbypass
{%- endif -%}
b15text: >-
{%- if states(alarmpanel) == "disarmed" -%}
{%- if b15armservice == "alarm_arm_home" -%}
arm\\rhome
{%- elif b15armservice == "alarm_arm_away" -%}
arm\\raway
{%- elif b15armservice == "alarm_arm_night" -%}
arm\\rnight
{%- elif b15armservice == "alarm_arm_vacation" -%}
arm\\rvaca
{%- elif b15armservice == "alarm_arm_custom_bypass" -%}
arm\\rbypass
{%- endif -%}
{%- else -%}
disarm
{%- endif -%}
trigger_variables: trigger_variables:
haspdevice: !input haspdevice haspdevice: !input haspdevice
@ -219,7 +277,7 @@ action:
payload: >- payload: >-
["p[7].b[13].font=6", ["p[7].b[13].font=6",
"p[7].b[15].font=6", "p[7].b[15].font=6",
{%- if alarmstate == "disarmed" -%} {%- if states(alarmpanel) == "disarmed" -%}
"p[7].b[13].pco={{selectedfg}}", "p[7].b[13].pco={{selectedfg}}",
"p[7].b[13].bco={{selectedbg}}", "p[7].b[13].bco={{selectedbg}}",
"p[7].b[13].pco2={{unselectedfg}}", "p[7].b[13].pco2={{unselectedfg}}",
@ -238,8 +296,8 @@ action:
"p[7].b[15].pco2={{selectedfg}}", "p[7].b[15].pco2={{selectedfg}}",
"p[7].b[15].bco2={{selectedbg}}", "p[7].b[15].bco2={{selectedbg}}",
{%- endif -%} {%- endif -%}
"p[7].b[13].txt=\"{{alarmstate_text}}\"", "p[7].b[13].txt=\"{{b13text}}\"",
"p[7].b[15].txt=\"{{alarmaction_text}}\""] "p[7].b[15].txt=\"{{b15text}}\""]
- repeat: - repeat:
count: "{{codelength}}" count: "{{codelength}}"
sequence: sequence:
@ -282,7 +340,7 @@ action:
data: data:
topic: "{{jsoncommandtopic}}" topic: "{{jsoncommandtopic}}"
payload: >- payload: >-
[{%- if alarmstate == "disarmed" -%} [{%- if states(alarmpanel) == "disarmed" -%}
"p[7].b[13].pco={{selectedfg}}", "p[7].b[13].pco={{selectedfg}}",
"p[7].b[13].bco={{selectedbg}}", "p[7].b[13].bco={{selectedbg}}",
"p[7].b[13].pco2={{unselectedfg}}", "p[7].b[13].pco2={{unselectedfg}}",
@ -301,8 +359,8 @@ action:
"p[7].b[15].pco2={{selectedfg}}", "p[7].b[15].pco2={{selectedfg}}",
"p[7].b[15].bco2={{selectedbg}}", "p[7].b[15].bco2={{selectedbg}}",
{%- endif -%} {%- endif -%}
"p[7].b[13].txt=\"{{alarmstate_text}}\"", "p[7].b[13].txt=\"{{b13text}}\"",
"p[7].b[15].txt=\"{{alarmaction_text}}\""] "p[7].b[15].txt=\"{{b15text}}\""]
######################################################################### #########################################################################
# Handle MQTT message triggers # Handle MQTT message triggers
@ -344,12 +402,36 @@ action:
{{button|int}} {{button|int}}
######################################################################### #########################################################################
# Arm was pressed # b13 arm was pressed
- conditions: - conditions:
- condition: template - condition: template
value_template: '{{ (trigger.payload_json.event is defined) and (trigger.payload_json.event == "p[7].b[15]") and (trigger.payload_json.value == "ON") and (alarmstate == "disarmed")}}' value_template: '{{ (trigger.payload_json.event is defined) and (trigger.payload_json.event == "p[7].b[13]") and (trigger.payload_json.value == "ON") and (states(alarmpanel) == "disarmed")}}'
sequence: sequence:
- service_template: "{{armservice_name}}" - service_template: "{{'alarm_control_panel.' ~ b13armservice}}"
data:
entity_id: !input alarmpanel
code: >-
{%- set code = namespace() -%}
{%- set code.value = states("number." ~ haspname ~ "_alarmcode_" ~ codelength)|int -%}
{%- for i in range(1,codelength|int) -%}
{%- set code.value = code.value|int * 10 + (states("number." ~ haspname ~ "_alarmcode_" ~ (codelength|int - i))|int) -%}
{%- endfor -%}
{{code.value|int}}
- repeat:
count: "{{codelength}}"
sequence:
# clear out code entry after arm attempt
- service: number.set_value
data:
entity_id: "number.{{haspname}}_alarmcode_{{repeat.index}}"
value: -1
#########################################################################
# b15 arm was pressed
- conditions:
- condition: template
value_template: '{{ (trigger.payload_json.event is defined) and (trigger.payload_json.event == "p[7].b[15]") and (trigger.payload_json.value == "ON") and (states(alarmpanel) == "disarmed")}}'
sequence:
- service_template: "{{'alarm_control_panel.' ~ b15armservice}}"
data: data:
entity_id: !input alarmpanel entity_id: !input alarmpanel
code: >- code: >-
@ -405,7 +487,7 @@ action:
payload: >- payload: >-
[{%- for i in range(4,15) if not i == 13 -%} [{%- for i in range(4,15) if not i == 13 -%}
"p[7].b[{{i}}].pco={{selectedfg}}",{%- endfor -%} "p[7].b[{{i}}].pco={{selectedfg}}",{%- endfor -%}
{%- if alarmstate == "disarmed" -%} {%- if states(alarmpanel) == "disarmed" -%}
"p[7].b[13].pco={{selectedfg}}", "p[7].b[13].pco={{selectedfg}}",
"p[7].b[15].pco={{selectedfg}}" "p[7].b[15].pco={{selectedfg}}"
{%- else -%} {%- else -%}
@ -425,7 +507,7 @@ action:
payload: >- payload: >-
[{%- for i in range(4,15) if not i == 13 -%} [{%- for i in range(4,15) if not i == 13 -%}
"p[7].b[{{i}}].bco={{selectedbg}}",{%- endfor -%} "p[7].b[{{i}}].bco={{selectedbg}}",{%- endfor -%}
{%- if alarmstate == "disarmed" -%} {%- if states(alarmpanel) == "disarmed" -%}
"p[7].b[13].bco={{selectedbg}}", "p[7].b[13].bco={{selectedbg}}",
"p[7].b[15].bco={{selectedbg}}" "p[7].b[15].bco={{selectedbg}}"
{%- else -%} {%- else -%}
@ -445,7 +527,7 @@ action:
payload: >- payload: >-
[{%- for i in range(4,15) if not i == 13 -%} [{%- for i in range(4,15) if not i == 13 -%}
"p[7].b[{{i}}].pco2={{unselectedfg}}",{%- endfor -%} "p[7].b[{{i}}].pco2={{unselectedfg}}",{%- endfor -%}
{%- if alarmstate == "disarmed" -%} {%- if states(alarmpanel) == "disarmed" -%}
"p[7].b[13].pco2={{unselectedfg}}", "p[7].b[13].pco2={{unselectedfg}}",
"p[7].b[15].pco2={{unselectedfg}}" "p[7].b[15].pco2={{unselectedfg}}"
{%- else -%} {%- else -%}
@ -465,7 +547,7 @@ action:
payload: >- payload: >-
[{%- for i in range(4,15) if not i == 13 -%} [{%- for i in range(4,15) if not i == 13 -%}
"p[7].b[{{i}}].bco2={{unselectedbg}}",{%- endfor -%} "p[7].b[{{i}}].bco2={{unselectedbg}}",{%- endfor -%}
{%- if alarmstate == "disarmed" -%} {%- if states(alarmpanel) == "disarmed" -%}
"p[7].b[13].bco2={{unselectedbg}}", "p[7].b[13].bco2={{unselectedbg}}",
"p[7].b[15].bco2={{unselectedbg}}" "p[7].b[15].bco2={{unselectedbg}}"
{%- else -%} {%- else -%}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB