Last active
February 4, 2026 00:04
-
-
Save julienma/555a408c486d109c5ec1e8c0ae1eddbc to your computer and use it in GitHub Desktop.
Home Assistant blueprint for Frient Keypad integration with Alarmo alam control panel
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| blueprint: | |
| name: "Frient Zigbee Keypad with Alarmo (PINs managed in Alarmo)" | |
| description: > | |
| This blueprint integrates the Frient Zigbee keypad with the Alarmo alarm control panel | |
| via Zigbee2MQTT. PINs and RFID tags are fully managed inside Alarmo — | |
| the keypad simply passes user actions (arm/disarm/emergency) to Alarmo. | |
| domain: automation | |
| author: "Based on nelis and AndrejDelany blueprint. Modified by DopeHead200 and julienma." | |
| source_url: "https://github.com/DopeHead200/alarmo-keypad-blueprint" | |
| input: | |
| z2m_keypad_path: | |
| name: "MQTT State Topic of your Zigbee2MQTT Keypad" | |
| description: "Example: zigbee2mqtt/Keypad" | |
| selector: | |
| text: {} | |
| z2m_keypad_path_set: | |
| name: "MQTT Set Topic of your Zigbee2MQTT Keypad" | |
| description: "Example: zigbee2mqtt/Keypad/set" | |
| selector: | |
| text: {} | |
| control_panel: | |
| name: "Alarmo Control Panel" | |
| description: "Select your Alarmo control panel entity (alarm_control_panel)" | |
| selector: | |
| entity: | |
| domain: alarm_control_panel | |
| trigger: | |
| # Un seul trigger pour tous les états du panneau | |
| - platform: state | |
| entity_id: !input control_panel | |
| id: panel_state | |
| - platform: mqtt | |
| topic: !input z2m_keypad_path | |
| id: keypad_mqtt | |
| condition: [] | |
| action: | |
| - choose: | |
| # --- Alarmo → Keypad sync (simplifié) --- | |
| - conditions: | |
| - condition: trigger | |
| id: panel_state | |
| - condition: template | |
| value_template: > | |
| {{ trigger.to_state is not none and | |
| trigger.to_state.state in [ | |
| 'arming','armed_away','armed_home','armed_night', | |
| 'pending','triggered','disarmed' | |
| ] }} | |
| sequence: | |
| - variables: | |
| mode_map: | |
| arming: exit_delay | |
| armed_away: arm_all_zones | |
| armed_home: arm_day_zones | |
| armed_night: arm_night_zones | |
| pending: entry_delay | |
| triggered: in_alarm | |
| disarmed: disarm | |
| - action: mqtt.publish | |
| data: | |
| topic: !input z2m_keypad_path_set | |
| payload: > | |
| { "arm_mode": { "mode": "{{ mode_map[trigger.to_state.state] }}" } } | |
| # --- Keypad → Alarmo --- | |
| - conditions: | |
| - condition: trigger | |
| id: keypad_mqtt | |
| sequence: | |
| - choose: | |
| - conditions: | |
| - condition: template | |
| value_template: '{{ trigger.payload_json.action == "arm_all_zones" }}' | |
| sequence: | |
| - action: alarm_control_panel.alarm_arm_away | |
| target: | |
| entity_id: !input control_panel | |
| data: | |
| code: '{{ trigger.payload_json.action_code | default("") }}' | |
| - conditions: | |
| - condition: template | |
| value_template: '{{ trigger.payload_json.action == "arm_day_zones" }}' | |
| sequence: | |
| - action: alarm_control_panel.alarm_arm_home | |
| target: | |
| entity_id: !input control_panel | |
| data: | |
| code: '{{ trigger.payload_json.action_code | default("") }}' | |
| - conditions: | |
| - condition: template | |
| value_template: '{{ trigger.payload_json.action == "arm_night_zones" }}' | |
| sequence: | |
| - action: alarm_control_panel.alarm_arm_night | |
| target: | |
| entity_id: !input control_panel | |
| data: | |
| code: '{{ trigger.payload_json.action_code | default("") }}' | |
| - conditions: | |
| - condition: template | |
| value_template: '{{ trigger.payload_json.action == "disarm" }}' | |
| sequence: | |
| - action: alarm_control_panel.alarm_disarm | |
| target: | |
| entity_id: !input control_panel | |
| data: | |
| code: '{{ trigger.payload_json.action_code | default("") }}' | |
| - conditions: | |
| - condition: template | |
| value_template: '{{ trigger.payload_json.action == "emergency" }}' | |
| sequence: [] | |
| default: [] | |
| mode: parallel | |
| max: 10 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment