Did you end up publishing your blueprint?
I did not but it is working great. I will put it up when I get home tonight.
That would be awesome!
Perhaps we can add your improvements to this blueprint?
I would prefer if we can provide a ‘one fits all’ solution to the user.
What is contained by this blueprint so far is based on what my own linkind keypad supports.
I have the same keypad, the xfinity. It gets the state from alarmo (the led and keypads change color) but nothing seems to happen when I use the pin on the keypad (the alarm state never updates). Any advice?
Sounds good to me. Ill post it up. I am using it with multiple keypads now. I do need a separate automation for each keypad. I suppose it would be amazing if there was 1 automation which could control as many keypads as possible, but thats a bit over my head.
blueprint:
name: Alarmo Keypad Sync - JD Rev
description: Keypad sync with Alarmo - JD Rev
domain: automation
input:
state_topic:
name: MQTT State Topic of your Zigbee2MQTT Keypad
description: 'The State Topic is composed of your Zigbee2MQTT base_topic (see
your Z2M Addon Configuration) and the Friendly Name of your keypad in Z2M.
Example: zigbee2mqtt/Keypad'
selector:
text: {}
set_topic:
name: MQTT Set Topic of your Zigbee2MQTT Keypad
description: 'This is the same as your State Topic, with the addition of /set.
Example: zigbee2mqtt/Keypad/set'
selector:
text: {}
entity:
name: Alarmo entity
description: An alarm control panel entity from alarmo.
selector:
entity:
domain: alarm_control_panel
integration: alarmo
multiple: false
trigger:
- platform: state
entity_id: !input entity
to: disarmed
id: to_state_armed_night
- platform: state
entity_id: !input entity
to: disarmed
id: to_state_disarmed
- platform: state
entity_id: !input entity
to: armed_home
id: to_state_armed_home
- platform: state
entity_id: !input entity
to: armed_away
id: to_state_armed_away
- platform: state
entity_id: !input entity
to: arming
id: to_state_arming
- platform: state
entity_id: !input entity
to: pending
id: to_state_pending
- platform: state
entity_id: !input entity
to: triggered
id: to_state_triggered
- platform: mqtt
topic: !input state_topic
id: keypad_command
- platform: event
event_type: alarmo_failed_to_arm
id: event_arm_failure
- platform: event
event_type: alarmo_command_success
id: event_command_success
condition: []
action:
- choose:
- conditions:
- condition: trigger
id: to_state_disarmed
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"disarm\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_armed_home
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"arm_day_zones\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_armed_night
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"arm_night_zones\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_armed_away
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"arm_all_zones\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_arming
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"exit_delay\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_pending
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"entry_delay\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_triggered
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"in_alarm\"\n }\n}"
- conditions:
- condition: trigger
id: keypad_command
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ trigger.payload_json.action == "disarm" }}'
sequence:
- service: alarmo.disarm
data:
entity_id: !input entity
code: '{{ trigger.payload_json.action_code }}'
context_id: '{{ trigger.payload_json.action_transaction }}'
- conditions:
- condition: template
value_template: '{{ trigger.payload_json.action == "arm_all_zones" }}'
sequence:
- service: alarmo.arm
data:
entity_id: !input entity
mode: away
code: '{{ trigger.payload_json.action_code }}'
context_id: '{{ trigger.payload_json.action_transaction }}'
- conditions:
- condition: template
value_template: '{{ trigger.payload_json.action == "arm_day_zones" }}'
sequence:
- service: alarmo.arm
data:
entity_id: !input entity
mode: home
code: '{{ trigger.payload_json.action_code }}'
context_id: '{{ trigger.payload_json.action_transaction }}'
- conditions:
- condition: template
value_template: '{{ trigger.payload_json.action == "arm_night_zones" }}'
sequence:
- service: alarmo.arm
data:
entity_id: !input entity
mode: home
code: '{{ trigger.payload_json.action_code }}'
context_id: '{{ trigger.payload_json.action_transaction }}'
- conditions:
- condition: trigger
id: event_arm_failure
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ trigger.event.data.reason == ''invalid_code'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id
}},\n \"mode\": \"invalid_code\"\n }\n}"
- conditions:
- condition: template
value_template: '{{ trigger.event.data.reason == ''open_sensors'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id
}},\n \"mode\": \"not_ready\"\n }\n}"
- conditions:
- condition: template
value_template: '{{ trigger.event.data.reason == ''not_allowed'' }}'
- condition: template
value_template: '{{ trigger.event.data.command|lower == ''disarm'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id
}},\n \"mode\": \"already_disarmed\"\n }\n}"
- conditions:
- condition: trigger
id: event_command_success
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ trigger.event.data.action == ''arm'' }}'
- condition: template
value_template: '{{ trigger.event.data.context_id != null }}'
- condition: template
value_template: '{{ trigger.event.data.mode == ''away'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id
}},\n \"mode\": \"arm_all_zones\"\n }\n}"
- conditions:
- condition: template
value_template: '{{ trigger.event.data.action == ''arm'' }}'
- condition: template
value_template: '{{ trigger.event.data.context_id != null }}'
- condition: template
value_template: '{{ trigger.event.data.mode == ''home'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id
}},\n \"mode\": \"arm_day_zones\"\n }\n}"
- conditions:
- condition: template
value_template: '{{ trigger.event.data.action == ''arm'' }}'
- condition: template
value_template: '{{ trigger.event.data.context_id != null }}'
- condition: template
value_template: '{{ trigger.event.data.mode == ''home'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id
}},\n \"mode\": \"arm_night_zones\"\n }\n}"
- conditions:
- condition: template
value_template: '{{ trigger.event.data.action == ''disarm'' }}'
- condition: template
value_template: '{{ trigger.event.data.context_id != null }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id
}},\n \"mode\": \"disarm\"\n }\n}"
mode: parallel
max: 10
Thanks for posting it!
For me, disarm works with just the code. Arming requires me to hit the arming mode button and than any 4 digits trigger it to be set. Would be nice if the button alone did it, but it seems to be a hardware related limitation that a code is required to send the arm command.
Hmmm. That’s what I’ve been trying. Thanks for the advice I appreciate the feedback. I’ll have to do more debugging.
Have you checked the logs in zigbee2mqtt?
Yeah I have. It looks correct to me (see example output):
Zigbee2MQTT:info 2022-09-07 09:22:57: MQTT publish: topic 'zigbee2mqtt/Kitchen Door Keypad', payload '{"action":"arm_all_zones","action_code":"1234","action_zone":23,"battery":100,"battery_low":false,"contact":true,"linkquality":0,"occupancy":false,"tamper":false,"temperature":20,"voltage":6300}'
Great work.
Do you have entry delay working?
Got it more or less all working except the entry delay.
As said in my original post:
This is what I am seeing.
Ofcourse you should have set up Alarmo to have an entry delay as well.
Ok yes…
I did not know it went in more detail in the sensor option.
Works great. Thanks
Thank you @neliss! I was just attempting to rewrite the blueprint from @AndrejDelany with alarmo and came across this post. I am using this with an XFINITY XHK1-UE and noticed that your blueprint didn’t include a night mode. I attempted to add it to your blueprint and it works well as long as you don’t have an exit_delay set for night mode in alarmo… Not sure why setting the alarm_night_zones
doesn’t clear the exit_delay
… not sure if it is a device issue or a z2m issue, or if it’s me. I thought I’d share my edits:
blueprint:
name: Alarmo Keypad Sync (gremblin)
description: Xfinity XHK1-UE Keypad sync with Alarmo edited by gremblin
domain: automation
input:
state_topic:
name: MQTT State Topic of your Zigbee2MQTT Keypad
description: 'The State Topic is composed of your Zigbee2MQTT base_topic (see
your Z2M Addon Configuration) and the Friendly Name of your keypad in Z2M.
Example: zigbee2mqtt/Keypad'
selector:
text: {}
set_topic:
name: MQTT Set Topic of your Zigbee2MQTT Keypad
description: 'This is the same as your State Topic, with the addition of /set.
Example: zigbee2mqtt/Keypad/set'
selector:
text: {}
entity:
name: Alarmo entity
description: An alarm control panel entity from alarmo.
selector:
entity:
domain: alarm_control_panel
integration: alarmo
multiple: false
trigger:
- platform: state
entity_id: !input entity
to: disarmed
id: to_state_disarmed
- platform: state
entity_id: !input entity
to: arming
id: to_state_arming
- platform: state
entity_id: !input entity
to: armed_away
id: to_state_armed_away
- platform: state
entity_id: !input entity
to: armed_home
id: to_state_armed_home
- platform: state
entity_id: !input entity
to: armed_night
id: to_state_armed_night
- platform: state
entity_id: !input entity
to: armed_vacation
id: to_state_armed_away
- platform: state
entity_id: !input entity
to: armed_custom_bypass
id: to_state_armed_away
- platform: state
entity_id: !input entity
to: pending
id: to_state_pending
- platform: state
entity_id: !input entity
to: triggered
id: to_state_triggered
- platform: mqtt
topic: !input state_topic
id: keypad_command
- platform: event
event_type: alarmo_failed_to_arm
id: event_arm_failure
- platform: event
event_type: alarmo_command_success
id: event_command_success
condition: []
action:
- choose:
- conditions:
- condition: trigger
id: to_state_disarmed
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"disarm\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_arming
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"exit_delay\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_armed_away
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"arm_all_zones\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_armed_home
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"arm_day_zones\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_armed_night
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"arm_night_zones\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_pending
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"entry_delay\"\n }\n}"
- conditions:
- condition: trigger
id: to_state_triggered
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"mode\": \"in_alarm\"\n }\n}"
- conditions:
- condition: trigger
id: keypad_command
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ trigger.payload_json.action == "disarm" }}'
sequence:
- service: alarmo.disarm
data:
entity_id: !input entity
code: '{{ trigger.payload_json.action_code }}'
context_id: '{{ trigger.payload_json.action_transaction }}'
- conditions:
- condition: template
value_template: '{{ trigger.payload_json.action == "arm_all_zones" }}'
sequence:
- service: alarmo.arm
data:
entity_id: !input entity
mode: away
code: '{{ trigger.payload_json.action_code }}'
context_id: '{{ trigger.payload_json.action_transaction }}'
- conditions:
- condition: template
value_template: '{{ trigger.payload_json.action == "arm_day_zones" }}'
sequence:
- service: alarmo.arm
data:
entity_id: !input entity
mode: home
code: '{{ trigger.payload_json.action_code }}'
context_id: '{{ trigger.payload_json.action_transaction }}'
- conditions:
- condition: template
value_template: '{{ trigger.payload_json.action == "arm_night_zones" }}'
sequence:
- service: alarmo.arm
data:
entity_id: !input entity
mode: night
code: '{{ trigger.payload_json.action_code }}'
context_id: '{{ trigger.payload_json.action_transaction }}'
- conditions:
- condition: trigger
id: event_arm_failure
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ trigger.event.data.reason == ''invalid_code'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: "{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id
}},\n \"mode\": \"invalid_code\"\n }\n}"
- conditions:
- condition: template
value_template: '{{ trigger.event.data.reason == ''open_sensors'' }}'
sequence:
# `not_ready` doesnt do anything, so modifying behavor to beep for 1 sec, then disarm
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: >-
{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id }},\n \"mode\": \"entry_delay\"\n}\n}
- delay: 1
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: >-
{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id }},\n \"mode\": \"disarm\"\n }\n}
- conditions:
- condition: template
value_template: '{{ trigger.event.data.reason == ''not_allowed'' }}'
- condition: template
value_template: '{{ trigger.event.data.command|lower == ''disarm'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: >-
{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id }},\n \"mode\": \"already_disarmed\"\n }\n}
- conditions:
- condition: trigger
id: event_command_success
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ trigger.event.data.action == ''arm'' }}'
- condition: template
value_template: '{{ trigger.event.data.context_id != null }}'
- condition: template
value_template: '{{ trigger.event.data.mode == ''away'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: >-
{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id }},\n \"mode\": \"arm_all_zones\"\n }\n}
- conditions:
- condition: template
value_template: '{{ trigger.event.data.action == ''arm'' }}'
- condition: template
value_template: '{{ trigger.event.data.context_id != null }}'
- condition: template
value_template: '{{ trigger.event.data.mode == ''home'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: >-
{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id }},\n \"mode\": \"arm_day_zones\"\n }\n}
- conditions:
- condition: template
value_template: '{{ trigger.event.data.action == ''arm'' }}'
- condition: template
value_template: '{{ trigger.event.data.context_id != null }}'
- condition: template
value_template: '{{ trigger.event.data.mode == ''night'' }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: >-
{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id }},\n \"mode\": \"arm_night_zones\"\n }\n}
- conditions:
- condition: template
value_template: '{{ trigger.event.data.action == ''disarm'' }}'
- condition: template
value_template: '{{ trigger.event.data.context_id != null }}'
sequence:
- service: mqtt.publish
data_template:
topic: !input set_topic
payload: >-
{\n \"arm_mode\": \n {\n \"transaction\": {{ trigger.event.data.context_id }},\n \"mode\": \"disarm\"\n }\n}
mode: parallel
max: 10
If you scroll a few posts back you will find another version modified for the XHK1-UE as well: Zigbee2MQTT - Control Alarmo via keypad - #16 by jsdphilly.
I’m intending to make an update to my original blueprint to achieve a one-fits-all but I must admit I didn’t take the effort yet…
Thanks for pointing that out. I missed that post. I just tested it and it is acting goofy on my XHK1-UE. When disarmed, the keypad temporally goes into arm_night_zones
, and I think it went into that mode briefly when arming away.
your edit is what i was looking for. I don’t mine not setting an exit delay for night mode.
This blueprint works great for me, but my Alarmo state is not represented on my Xfinity XHK1-UE keypad. Are you on the dev branch of z2m
no. I’m on the main production branch of z2m… I just updated the blueprint with some tweeks I did. It shouldn’t fix your problem though. Yours should sync in it’s previous state.