Help build binding for Paradox Alarm Panel with IP150

Hi,

I’ve been able to successfully connect to the IP150 module of my MG5050 Paradox alarm using python and without using any web emulator. In fact the only libraries I’ve used are haslib (for hex-md5), socket for the IP, and time for some delays.

This would mean (correct me if I’m wrong) that most programming languages would be able to connect to the device. Successes so far:

  1. Can login with my user code and ip module password [automatically calculates hashes etc. based on these]
  2. Get a list of names for all the zones
  3. See the state of zones [currently polling every 0.5s]
  4. Arm/disarm/stay/sleep control

There’s a lot more information that you can parse from the pages I’ve been requesting so far… once sorting out the login part its pretty much free rein into the alarm system.

I would really like it if someone with Openhab programming skills can take this and give us a more native solution. I like tinkering with code and would take forever to make a binding… Any takers?

ps. I will share the code sometime soon, just need to clean it up first and see what can be optimized.

cheers,
Tertius

2 Likes

That is awesome, well done. It might be simplest to just get it talking in MQTT and then use that as the interface to OpenHab before tackling a complete binding.

Would love to give the code a try.

@mkent, I had the exact same thought with MQTT. Will do an initial go at it and hopefully post some code later today.

Just an update, I’m trying to solve some issues in keeping the connection stable. I’m mainly containerising some of my code into functions so that I can catch and act on exceptions in a better way. This will take a bit of time but not long.

So far the basic program connects to a MQTT broker and sends updates for any zone changes, reports zone names and assigned partitions, and I can also publish controls back to the alarm (per partition). Unfortunately the IP150 doesn’t seem to have any control over the alarm’s PGM outputs so automating that garage door will have to be done separately for now.

The iParadox app exposes the PGMs via the IP150 when used against the EVO-192 Panels. I just tried it, and can hear PGM05 switching on the Panel.

Do you need a packet dump, or are you now using another technique to snarf the messages?

I have a PRT3 attached to mine, so can gen traffic that way also.

The iParadox app also uses the software port [usually 10000] and therefore has full access to the panel. I’m only using the http port, so essentially what you can see and do with the web interface can be mimic’d here.

I would love to be wrong about this as I really want to control the PGMs.

Fair enough, I didn’t cop that you were using HTTP instead of the binary-form. I’d forgotten the IP150 even had a web interface :wink:

It’ll be good to see it tied into MQTT. I’d imagine the Paradox team could themselves benefit from having the IP150 talk MQTT directly.

I’ve published my initial code to Github. Further details there.

I guess you can run this as a service although I’ve not done any long-term stability tests. Currently there’s also no code that handles the case where you are logged out of the IP module, although this can be added in fairly easily, soon…

Edit: Forgot to mention that I have a 32 zone setup, although I believe any amount would work.

Thanks for sharing

I tried to connect but I receive these message

No connection to IP Module, are you already logged in? Attempting logout and trying again... (3)
Disconnect OK received from IP Module

for 3 times and then exit. I’m not logged from other app or website.
What can be wrong?

Thanks

Weird, if you only get this output then the initial socket connection to the IP Module was successful. This error will then occur if the required login page of the IP module was not recognised (or sent back at all or the connection terminated for some reason).

The fact that you get the “Disconnect OK Received…” message means that you are at least getting some response.

I’d like to see if anyone else has this issue; I did try with another alarm system and it worked fine there. Off to bed now though so will see what tomorrow brings…

Done a little test, seems to work great on my Mac. Now to tie it into OpenHAB… Thanks so much.

That’s great news. I hope you downloaded in the last 2 hours cause there was still some old code hanging around that I forgot to remove.

If not just grab the latest IP150-MQTT file [otherwise your alarm will disarm after about 3 hours and disconnect from the IP module - seriously]!

Yep, it was about 30 min ago, so hopefully all good.

Just a thought. It would be nice if there was an MQTT command to disconnect/reconnect this from the IP150. Just in case OpenHAB stops responding for whatever reason and I need to default back to the Paradox App. I like to have fallback options… :wink:

Sounds like a good idea. I also need to work on general failure recovery mechanisms in the app.

Got it running as a daemon on the mac. I’ll put my Plist file on Github for anyone else who might need it.

Implemented the enable/disable of polling and pushed to github [also updated the readme over there]. This is actually quite useful now that I’ve implemented it!

I also introduced a state machine to better handle errors (especially the unknown ones).

I’m still getting error.

Attempting connection to MQTT Broker: 192.168.1.yyy:xxxx
Connected to MQTT Broker
Attempting connection to IP module: 192.168.1.yyy:xx
Connected with result code 0
 No connection to IP Module, are you already logged in? Attempting logout and trying again... (3)
Disconnect OK received from IP Module
No connection to IP Module, are you already logged in? Attempting logout and trying again... (2)
Disconnect OK received from IP Module
No connection to IP Module, are you already logged in? Attempting logout and trying again... (1)
Disconnect OK received from IP Module
No connection to IP Module, are you already logged in? Attempting logout and trying again... (0)
Failure, cannot connect
Last received data: 
HTTP/1.0 200 OK
Server: lwIP/1.4.0 (http://savannah.nongnu.org/projects/lwip)
Content-type: text/html
Cache-control: no-cache

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
	<meta http-equiv='content-type' content='text/html; charset=UTF-8' />
	<link rel='stylesheet' type='text/css' href='webstyles.css' />
	<title></title>
<script type='text/javascript'>function redirect(){var port="xxx";window.location = "https://" + window.location.hostname + ":" + port + window.location.pathname + window.location.search;} redirect();</script></head><body></body></html>
******************* Attempting to login again *******************

I have my http port xx redirect to an https port.
So if I connect via browser to the ip address of my IP150 to port xx it redirect to xxx and then I get the login page.
Really strange…

By the way, just downloaded from Github and replaced

Aha - you have https enabled in your IP module. Unfortunately I haven’t given any though for encrypted links yet so for now you need to manually log into the IP module, go to “IP150 Configuration” and click “No” next to the HTTPS port option. Then click save. Noting that whenever you log into the IP module your data will now not be encrypted, if that is a problem to you.

Ok, sorry. I wasn’t aware that with https was not working.
Now I’ve got it work and I can see my Alarm Name, Area Names and Zone Names.

The it says "Going to State_Machine 3, what does it mean?
And then “Connected and polling data every 0.5s”

What I don’t, and I can see in the script, is the state in a clear way, Arm, Disarm, Stay etc.

After this what can be done and how, if already implemented?

In the meantime, I thank you for the work you did. Very nice, even if I’m little bit afraid to leave the web panel without https…

You need to use the MQTT broker to subscribe to the data. On github I’ve documented the expected messages. The script doesn’t output much after being connected as I don’t want log files (screen prints /outputs) to unnecessarily cause writing to the disk; useful on installations running on an sd card.