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

2 Likes

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.

Tada, we have an integration. This is a) still beta and buggy, b) for area systems not home/sleep/away (sorta, read the readme for more info), and c) only for panels with a local network port. Also, this integration supports the lock object via the DMP 734 family modules. Paging @JoeJalbe since he can probably tell me what I did wrong from a DMP integrator’s view. Let me know what y’all think.

Hi
This is interesting. That DMP panel does it support? I have a 50xl, I believe and have integrated it to HA by adding a DMP 680 card to the panel. I used a Particle Photon to interface a zone to provide the remote arming / disarming function. It also reports Fire, Burglary, and Ready status via MQTT into HA. Currently working on interfacing NoonLight remote 24/7 monitoring. Which was the missing piece for years.

5310

It has been tested on an XR500N and XR150. I can’t imagine a reason why it wouldn’t work assuming it has a network port.

Hi, great work on this! I noticed in the read me of your download that it seems like you are communicating with the alarm system through it’s communication port. If this is true, I might suggest that you explore using the integrator ports instead. I have had great success with this setup on Crestron and control 4. you simply point The automation controller at the alarm panels IP address, remote key and port number 2001. You then going to panel programming and integrator options you enter the automation controllers IP address and port number and you will have a full log of everything that happens in the panel. If I understand it correctly it comes through with the reporting codes in a serial print format. The idea was actually originally designed for the XR500 series where they had an onboard RS-232 port that you could hook a printer up to and have a live paper feed of every event that happened in the panel. Then the XR 550 series came out they converted that RS-232 to a serial print over IP setup. After several firmware iterations they added the ability to control the panel through that connection as well. In fact I believe it has even more functionality with the new version 212 that was released last month. Fun fact the DMP firmware version numbers are the year and how many releases have come out for that year so this is the second release in 2021.

Wow, I feel like I may have found my holy grail! We have an older DMP system I’ve been trying to figure out for ages how to integrate. I’m willing to upgrade the panel if it makes things easier, but I’m not willing to pay a monthly service fee just to access my own hardware!

One question. In looking through the read me on this, I see door lock/unlock isn’t reported. To confirm, this means it doesn’t yet support notifications on open/close status or motion sensor status? This would be my main use case, so just double checking.

I’m so appreciative others are working on this. Happy to help anywhere I can.

I think this is what @baddienatalie has setup with the code she has generously provided above. That is the port in use and it does look like serial conversion to my untrained eye.

I’ve been setting up @baddienatalie’s custom integration code and HA and the panel are talking. Arming/disarming from the alarm keypad registers in HA very quickly, however the arm/disarm buttons in HA are not functioning. I’ve gone over the configuration pretty carefully as it is likely I missed something but I can’t find it.

I enabled debug logging and see these messages… are they related to arming/disarming from HA?

2021-09-24 19:24:33 DEBUG (MainThread) [custom_components.dmp] b'\x02@ 1003-VU\r\x00\x02@ 1003-VU\r\x00'
2021-09-24 19:24:44 DEBUG (MainThread) [custom_components.dmp] b'\x02@ 1003-VU\r\x00\x02@ 1003-VU\r\x00'
2021-09-24 19:24:51 DEBUG (MainThread) [custom_components.dmp] b'\x02@ 1003-VU\r\x00\x02@ 1003-VU\r\x00'

Is there some strategic logging I can drop into the code somewhere to try to get better visibility into what is going wrong?

FYI, this is a brand new (to me) DMP panel that I’m setting up on a bench, so not much is yet connected and configured. Here’s how I set it up in configuration.yaml

dmp:
  listen_port: 2001
  panels:
    - account_number: 1234
      ip: 192.168.0.3
      remote_key: "1234567890      "

alarm_control_panel:
  - platform: dmp
    area_number: "001"
    area_name: "Perimeter"
    area_accountnumber: 1234
  - platform: dmp
    area_number: "002"
    area_name: "Interior"
    area_accountnumber: 1234
  - platform: dmp
    area_number: "003"
    area_name: "Bedrooms"
    area_accountnumber: 1234

Hi tallguy,

Glad to see my integration is of use to more than just me lol. The debug messages I have are just the raw bytes coming in from the TCP port. What model panel is it?

Here’s what I have in my config, tested working on a DMP XR150:

dmp:
  listen_port: 2001
  panels:
    - account_number: 1003
      ip: 10.12.34.56
      remote_key: "[redacted]"

alarm_control_panel:
  - platform: dmp
    area_number: "001"
    area_name: "Basement"
    area_accountnumber: 1003

lock:
  - platform: dmp
    door_name: "Basement Garage Door"
    door_number: "02"
    account_number: 1003

Also, lol, I know why arm isn’t working, I hardcoded my account number into there :rofl:

I patched it with my latest commit, run a git pull or download a new zip and let me know if it works.

FYI, in the responses, the 1003 was the account number I hardcoded. ! means a command, and - means a fail. If I remember right -VU means incorrect account number. I also cleaned up a lot of my logging output, added some context as well.

Let me know if any of that helped. Cheers!

1 Like

The door lock/unlock is for the DMP 734 module which is for card reader systems (i.e. the panel has control over a physical lock). It does not currently report zone state; although that’s something I may add at a later date. If that is something you strongly desire I can fast track it and see if I can get it built in.

Thanks @baddienatalie !! I picked up a XR500N for $15 on eBay. It came with a 8 zone expander and CDMA communicator. The board looks like it will drop in and work with our 3 existing keypads and wireless zone expander so this is a fantastic deal, and seems like the most simple way to interface with a UL rated system from HA! Thanks so much for your code!

I’ll do a pull and start messing around with more. I was going to post some log output from testing zones to help others but I’ll pull your latest code first.

XR500N will work great. DMP is super backwards compatible on the busses, on the latest XR550N panel you can use the old early 00s/late 90s Security Command keypads. It should just drop in and work, although you might need to get a bigger can depending on how big the PCB is.

Here is some debug output from testing for anyone curious about this integration. This is after a fresh restart with @baddienatalie updates to allow arming/disarming. I armed, triggered an alarm and then disarmed the system. This is working pretty well, maybe not perfect but I’ll do more testing to see if I can pinpoint what is and what may not be. Thanks again @baddienatalie !!

2021-09-25 13:46:59 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4200)
2021-09-25 13:46:59 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: E3EF 1234 Zs\022\t 084\c 02"NP\ 
2021-09-25 13:46:59 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:47:05 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00\x02@ 1234+V12012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234\r\x00'
2021-09-25 13:47:07 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4201)
2021-09-25 13:47:07 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: A4E7 1234 Zq\070\t "CL\u 32764"REMOTE USER \a 002"1 \c 02"NP\ 
2021-09-25 13:47:07 DEBUG (MainThread) [custom_components.dmp] Area 002 has been updated
2021-09-25 13:47:07 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:47:21 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00'
2021-09-25 13:47:23 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4202)
2021-09-25 13:47:23 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: E3EF 1234 Zs\022\t 084\c 02"NP\ 
2021-09-25 13:47:23 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:47:42 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00'
2021-09-25 13:48:36 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4206)
2021-09-25 13:48:37 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: 4604 1234 Za\068\t "BU\z 001"DINING RM WINDOW\a 001"1 \c 02"NP\ 
2021-09-25 13:48:37 DEBUG (MainThread) [custom_components.dmp] Area 001 has been updated
2021-09-25 13:48:37 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:48:39 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4207)
2021-09-25 13:48:39 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: C37C 1234 Zr\068\t "BU\z 001"DINING RM WINDOW\a 001"1 \c 02"NP\ 
2021-09-25 13:48:39 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:48:53 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00\x02@ 1234+V12012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234\r\x00'
2021-09-25 13:48:55 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4208)
2021-09-25 13:48:55 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: 2E2E 1234 Zq\070\t "OP\u 32764"REMOTE USER \a 001"1 \c 02"NP\ 
2021-09-25 13:48:55 DEBUG (MainThread) [custom_components.dmp] Area 001 has been updated
2021-09-25 13:48:55 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:48:57 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4209)
2021-09-25 13:48:57 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: 1DCB 1234 Zs\047\t 049\u 32764"REMOTE USER \c 02"NP\ 
2021-09-25 13:48:57 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:49:02 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4210)
2021-09-25 13:49:02 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: E3EF 1234 Zs\022\t 084\c 02"NP\ 
2021-09-25 13:49:02 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:49:09 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00\x02@ 1234+V12012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234\r\x00\x02@ 1234+O\r\x00'
2021-09-25 13:49:11 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4211)
2021-09-25 13:49:11 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: EE28 1234 Zq\070\t "OP\u 32764"REMOTE USER \a 002"1 \c 02"NP\ 
2021-09-25 13:49:11 DEBUG (MainThread) [custom_components.dmp] Area 002 has been updated
2021-09-25 13:49:11 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:49:13 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4212)
2021-09-25 13:49:13 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: E3EF 1234 Zs\022\t 084\c 02"NP\ 
2021-09-25 13:49:13 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:50:15 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00\x02@ 1234+V12012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234\r\x00'
2021-09-25 13:50:16 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4215)
2021-09-25 13:50:16 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: 64E1 1234 Zq\070\t "CL\u 32764"REMOTE USER \a 001"1 \c 02"NP\ 
2021-09-25 13:50:16 DEBUG (MainThread) [custom_components.dmp] Area 001 has been updated
2021-09-25 13:50:17 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:50:27 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00'
2021-09-25 13:50:29 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4216)
2021-09-25 13:50:29 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: E3EF 1234 Zs\022\t 084\c 02"NP\ 
2021-09-25 13:50:29 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:50:49 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4217)
2021-09-25 13:50:49 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: 98A9 1234 s0700240 
2021-09-25 13:50:49 INFO (MainThread) [custom_components.dmp] 1234: Received checkin message
2021-09-25 13:50:49 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:50:59 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00'
2021-09-25 13:51:17 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00'
2021-09-25 13:51:20 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00'
2021-09-25 13:51:40 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00'
2021-09-25 13:52:24 DEBUG (MainThread) [custom_components.dmp] DMP: Received data after command: b'\x02@ 1234+V\r\x00\x02@ 1234+V12012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234012340123401234\r\x00\x02@ 1234+O\r\x00'
2021-09-25 13:52:26 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4222)
2021-09-25 13:52:26 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: 2E2E 1234 Zq\070\t "OP\u 32764"REMOTE USER \a 001"1 \c 02"NP\ 
2021-09-25 13:52:26 DEBUG (MainThread) [custom_components.dmp] Area 001 has been updated
2021-09-25 13:52:26 DEBUG (MainThread) [custom_components.dmp] Connection disconnected
2021-09-25 13:52:28 INFO (MainThread) [custom_components.dmp] Connection from ('192.168.0.3', 4223)
2021-09-25 13:52:28 DEBUG (MainThread) [custom_components.dmp] Received data from panel 1234: E3EF 1234 Zs\022\t 084\c 02"NP\ 
2021-09-25 13:52:28 DEBUG (MainThread) [custom_components.dmp] Connection disconnected