How Can I Sync Legacy Alarm System Status with Manual Alarm Control Panel

Hello,

I’ve got a legacy alarm system connected in parallel to a Konnected Alarm Panel Pro. “In parallel,” means that the legacy keypads are still on the wall and can be used to enable or disable the alarm. The Konnected component allows me to connect the alarm to HA so I can arm/disarm and see the status of each sensor.

Using Manual Alarm Control Panel (MACP), I am able to arm and disarm my alarm without issue. Unfortunately, the state of the alarm (arm/home, arm/away, etc.) does not sync with HA if someone used the legacy keypad to do something with the alarm.

A scenario:

  1. Person A uses the keypad to arm/away
  2. Person B can look in HA at the Konnected integration and see the Armed/Disarmed binary sensor (output_17) status is open (meaning the alarm is armed), but it doesn’t specify whether it is armed in home or away mode
  3. MACP still shows a status of disabled

I can’t figure out the Action portion of the automation where I tell MACP to sync the Arm/Away status. I’m only seeing options that would tell MACP to execute the command for Arm/Away, which would then disable the alarm, or to confirm a status.

I need to change the status.

Here is the yaml for the automation. It references two different automations that I used to have MACP tell Konnected to arm the system.

alias: Arm/Away or Alarm/Stay Enabled from Keypad
description: When the alarm is enabled without HA
trigger:
  - platform: state
    entity_id:
      - binary_sensor.output_17
    from: "off"
    to: "on"
condition:
  - condition: not
    conditions:
      - condition: state
        entity_id: automation.arme_away_enabled_by_manual_alarm_control_panel
        state: "off"
  - condition: not
    conditions:
      - condition: state
        entity_id: automation.home_stay_enabled_from_manual_alarm_control_panel
        state: "off"
action:
  - delay:
      hours: 0
      minutes: 1
      seconds: 0
      milliseconds: 0
  - if:
      - condition: and
        conditions:
          - condition: state
            entity_id: binary_sensor.back_door
            state: "off"
            for:
              hours: 0
              minutes: 1
              seconds: 0
          - condition: state
            entity_id: binary_sensor.front_door
            state: "off"
            for:
              hours: 0
              minutes: 1
              seconds: 0
          - condition: state
            entity_id: binary_sensor.kitchen_entry_door
            state: "off"
            for:
              hours: 0
              minutes: 1
              seconds: 0
    then:
      - condition: state
        entity_id: alarm_control_panel.home_alarm
        state: armed_home
    else:
      - condition: state
        entity_id: alarm_control_panel.home_alarm
        state: armed_away
mode: single

Does anyone have suggestions for the “then” and “else” portions? Thanks!

I wanted to share/summarize the solution in case someone else needs it.

I scrapped the Manual Alarm Control Panel integration, and used Template Alarm Control Panel (TACP). Then I created a text helper whose value was set based on various criteria in automations.

TACP’s value_template is reliant on that helper to represent the proper state. The disarm portion of TACP has an if/then/else statement that tells it which service to toggle (arm_stay vs arm_away) based on the value of the helper.

It’s important to note that some legacy alarm systems will default to Armed Stay after the countdown completes if it doesn’t see any doors open/close (indicating someone has set the alarm and left the house) even when you set to Armed Away.

To account for that situation when arming away from HA after exiting the house, I disabled that setting in my legacy system. And, to solve the question of what type of arming was done from the keypad, I created an HA automation that is triggered when the alarm is armed. If the alarm was triggered by HA, the helper value is set to the correct state. If the alarm wasn’t enabled by HA, the automation waits 60 seconds and checks to see if any doors were opened/closed. Based on that condition it will set my helper to the correct value.

I know I didn’t post any yaml, but I’m hoping the summary above will point you in the right direction.

1 Like