blueprint: name: Xfinity Keypad & Alarmo ZHA by Ekylypse description: Modded by Ekylypse from Keypad Frient (KEPZB-110) for Alarmo by Darktoinon domain: automation input: keypad: name: xfinity Keypad description: | The xfinity keypad in use. selector: device: integration: zha alarm_panel: name: Alarm Panel description: | The Xfinity alarm panel to control. selector: entity: domain: alarm_control_panel mirror_alarm_panel: name: Alarm Panel to Mirror description: | The alarm panel to sync with Keypad (e.g., Alarmo). default: alarm_control_panel.alarmo selector: entity: domain: alarm_control_panel arm_pin: name: Alarmo requires PIN to Arm? description: If true, Alarmo requires valid PIN to arm.If false, any pin will arm Alarmo. selector: boolean: pin_list: name: Valid PIN Codes description: | List of valid PIN codes for arming/disarming, separated by semicolons (;). These need to be valid PIN codes in Alarmo! default: "" selector: text: {} default_pin: name: Default PIN Code for Alarms description: | The default PIN code to use for syncing arming/disarming both alarms(Use 5 digits). default: "" selector: text: {} triggers: - event_type: zha_event event_data: device_id: !input keypad command: arm id: keypad_event trigger: event - entity_id: !input mirror_alarm_panel id: alarmo_state_change trigger: state conditions: [] actions: - if: - condition: template value_template: > {% if trigger.event.data.args.code in pin_list and 'true' in pin_to_arm %} {{ 1 == 1 }} {% elif 'false' in pin_to_arm %} {{ 1 == 1 }} {% endif %} enabled: true then: - choose: - conditions: - condition: trigger id: keypad_event - condition: template value_template: "{{ trigger.event.data.command == 'arm' }}" sequence: - choose: - conditions: - condition: template value_template: >- {{ trigger.event.data.args.arm_mode == 0 and trigger.event.data.args.code in pin_list }} - condition: state entity_id: !input alarm_panel state: - armed_home - armed_away - armed_night - triggered sequence: - target: entity_id: !input alarm_panel data: code: "!input default_pin" action: alarm_control_panel.alarm_disarm - target: entity_id: !input mirror_alarm_panel data: code: >- {{ trigger.event.data.args.code if trigger.event.data.args.code != '' else default_pin }} action: alarm_control_panel.alarm_disarm - conditions: - condition: template value_template: "{{ trigger.event.data.args.arm_mode == 1 }}" sequence: - target: entity_id: !input mirror_alarm_panel data: code: >- {{ trigger.event.data.args.code if trigger.event.data.args.code != '' else default_pin }} action: alarm_control_panel.alarm_arm_home - conditions: - condition: template value_template: "{{ trigger.event.data.args.arm_mode == 2 }}" sequence: - target: entity_id: !input mirror_alarm_panel data: code: >- {{ trigger.event.data.args.code if trigger.event.data.args.code != '' else default_pin }} action: alarm_control_panel.alarm_arm_night - conditions: - condition: template value_template: "{{ trigger.event.data.args.arm_mode == 3 }}" sequence: - target: entity_id: !input mirror_alarm_panel data: code: >- {{ trigger.event.data.args.code if trigger.event.data.args.code != '' else default_pin }} action: alarm_control_panel.alarm_arm_away - conditions: - condition: trigger id: alarmo_state_change sequence: - choose: - conditions: - condition: state entity_id: !input mirror_alarm_panel state: disarmed sequence: - target: entity_id: !input alarm_panel data: code: "!input default_pin" action: alarm_control_panel.alarm_disarm - conditions: - condition: state entity_id: !input mirror_alarm_panel state: armed_home sequence: - target: entity_id: !input alarm_panel data: code: "!input default_pin" action: alarm_control_panel.alarm_arm_home - conditions: - condition: state entity_id: !input mirror_alarm_panel state: armed_night sequence: - target: entity_id: !input alarm_panel data: code: "!input default_pin" action: alarm_control_panel.alarm_arm_night - conditions: - condition: state entity_id: !input mirror_alarm_panel state: armed_away sequence: - target: entity_id: !input alarm_panel data: code: "!input default_pin" action: alarm_control_panel.alarm_arm_away - conditions: - condition: state entity_id: !input mirror_alarm_panel state: triggered sequence: - target: entity_id: !input alarm_panel action: alarm_control_panel.alarm_trigger data: {} default: [] - if: - condition: trigger id: - keypad_event then: - delay: hours: 0 minutes: 0 seconds: 5 milliseconds: 0 - if: - condition: state entity_id: !input mirror_alarm_panel state: disarmed - condition: not conditions: - condition: state entity_id: !input alarm_panel state: disarmed then: - action: alarm_control_panel.alarm_disarm metadata: {} data: {} target: device_id: !input keypad variables: pin_list: !input pin_list default_pin: !input default_pin pin_to_arm: !input arm_pin # Translation for English and French messages text_arm_home: "Arm Home" text_arm_night: "Arm Night" text_arm_away: "Arm Away" text_disarm: "Disarm" mode: single