Alarm component for DMP alarm system

Hi
I have a DMP XL50 security alarm system that I’d like to interface with Home Assistant. DMP only offers an app for remote control if you subscribe to their service through an authorized dealer. Monthly $$$. But after some research I’ve been able to remotely arm and disarm the system and setup binary sensors to report limited alarm status such as
FIRE
BURGLARY
Whether armed or disarmed
READY status of the system.

My objective is to develop a alarm.py interface for the DMP security alarm offerings like those available to others. Can anyone point me in the right direction to get started. I current have one of the Zones configured to a relay via a GPIO pin on a Raspberry PI and have been able to arm and disarm the panel with a virtual switch in Home Assistant.
I’ve also added the below automation so I can utilize the Home Assistant’s manual alarm panel.
automation:

  • id: armed_home
    alias: ‘Armed Home’
    trigger:
    platform: state
    entity_id: alarm_control_panel.HA_Alarm
    to: armed_home
    condition:
    condition: and
    conditions:
    • condition: state
      entity_id: binary_sensor.FIRE
      state: ‘off’
    • condition: state
      entity_id: binary_sensor.THEFT
      state: ‘off’
    • condition: state
      entity_id: binary_sensor.ARM_STATUS
      state: ‘off’
    • condition: state
      entity_id: binary_sensor.READY
      state: ‘on’
      action:
  • service: switch.turn_on
    entity_id: switch.Arm

My interface to the DMP panel provides only the following statuses which I have configured as binary sensors.
FIRE - ON = a fire sensor has trigger and there is s FIRE
OFF = Normal
THEFT ON = the burglary sensors have been activated
OFF= Normal
ARM_STATUS ON = System is armed
OFF = System is disarmed
READY ON = System state is able to be armed
OFF = System state is not able to be armed. Maybe door is open.
When all the conditions are met the switch.Arm is turned on and the DMP system is armed. And it PHYSICALLY works then any of the conditions aren’t met and won’t arm too but the Home Assistant Alarm panel shows that the system is armed. Any ideas how to fix?

Being a NEWBIE I couldn’t find correct to post this, sorry.
Thanks
5310

I have one as well, and been wanting this - to date all I’ve been able to tell is that Crestron and Control4 interface with this through an integration they have created for their own software called Entre.

Entre is DMPs software. I believe it don’t infterface with Home Assistant. I installed a DMP 860 board and am able to arm / disarm and receive alarm status, like buglary and fire. Very limited. Only when there is an alarm but not where or why. dMP is a properitary system. Hope this helps

Hi all. I’ve been notified by @Apple2T4ch that apparently my skills might be of use here. I own two XR500 boards and have been busy working on the Remote Link TCP communication protocol.

@amattas mentioned the Crestron integration uses Entre - this is only sort of true. They actually have a module that communicates directly with the panel via the Remote Link TCP protocol. I’ve been using this in conjunction with some brute force testing to get a lot of preliminary info. I’ve been using this (http://data.jelimoore.xyz/Dropzone/python_rxdmp.py) script to just listen to events over the network. Keep in mind here, there are 2 main methods of network communication - monitoring/PC reports, and Remote Link. That script is for the monitoring - run that script, go into the programmer, set a new communication path of type “NET” and set the IP to whatever box you’re running it on and bam, you’ll get events. They look a bit like this (I have added plain english labels for ease of understanding):

bypass	b'\x0239D8   1002 Zx\\093\\t "BU\\z 001"TEST            \\u 32764"REMOTE USER     \\a 001"MAIN            \\c 01"NP\\\r\x00'
unbypass b'\x028819   1002 Zy\\093\\t "BU\\z 001"TEST            \\u 32764"REMOTE USER     \\a 001"MAIN            \\c 01"NP\\\r\x00'

arm	b'\x025D5F   1002 Zq\\076\\t "CL\\u 32764"REMOTE USER     \\a 001"MAIN            \\e "AC\\c 01"NP\\\r\x00'
bypass	b'\x0239D8   1002 Zx\\093\\t "BU\\z 001"TEST            \\u 32764"REMOTE USER     \\a 001"MAIN            \\c 01"NP\\\r\x00'
disarm	b'\x0283EC   1002 Zq\\070\\t "OP\\u 32764"REMOTE USER     \\a 001"MAIN            \\c 01"NP\\\r\x00'


checkin b'\x025885   1001 Zs\\014\\t 086\\\r\x00'

Remote Link is more of a configuration editor and the monitoring is just for receiving events. I do not actually posses the remote link app but I do have System Link which gets you most everything sans programming (change user codes, schedules, arm/disarm, etc). I’m still trying to delve a bit into the actual writing of data to the panel, it looks like they have some sort of checksum embedded in there. That’s not important to HASS anyways, so I’ll shelve it for later. I’ve been ensconced in other projects and just haven’t written the parser for the DMP network protocol.

Now, if all else fails, you can also use an inexpensive ATA and run alarmreceiver in Asterisk to parse the CID events. I actually have a small proof-of-concept app running in Python and Flask to receive the events and log them in a database + fire off a text message if SHTF. This is how my main panel currently communicates with me for alarms, bypasses, troubles, etc.

Any other questions feel free to pick my brain. Love to be of help.

Natalie

1 Like

I was not able to open that link to your script. Do you have a newer link?

Sorry, doing some server maintenance atm. Code:

#!/usr/bin/env python3

import socket
import time
from datetime import datetime

HOST = '0.0.0.0'
PORT = 2001

sAccount = ' '
Account_Number = '1002'


with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    while True:
        conn, addr = s.accept()
        with conn:
            print('Connected by', addr, 'at', datetime.utcnow())
            while True:
                time.sleep(0.5)
                try:
                    data = conn.recv(2048)
                    print(data)
                    if not data:
                        break
                    ackString = '\x02' + sAccount + Account_Number + '\x06\x0D'
                    conn.send(ackString.encode())
                    print('Done with data')
                except:
                    print('Error receiveing')

Awesome. Thank you!

Just found this doc, would be of interest if anybody is developing an integration. I’m working on a basic PC log report connection to listen only.