Tidbits on software development, technology, and other geeky stuff

iPhone Control of House Alarm and Garage Doors

About a year ago I bought a VISTA-ICM for my Honeywell VISTA-20P alarm system which is installed in my house. This little jewel connects the VISTA up to the internet to provide web interface control as well as event notifications. I originally bought it so I could self monitor my alarm and avoid the high fees of monitoring services. This is what it looks like:

The setup was easy and it started working within 15 minutes of opening the box up. I set it up to send emails to my cell phone email address so that text messages would be sent when an alarm occured. I tested faulting the system and sure enough I got a text message within seconds of the alarm going off. Also, one time my wife and I were at the airport about to go on a trip and realized we forgot to arm the alarm. I pulled up web interface from my cell phone web browser and was able to arm it. Admittedly, the web interface was not user friendly but it got the job done.

Then I started thinking about writing and interface for the iPhone so that it would be much more usable from my phone.  Also, I wanted to handle sending the notifications on my own so I didn’t have to worry about them ceasing to work some random day since the delivery mechanism relies upon the vendor’s API.  As an added bonus, I wanted to control my garage doors as well since the VISTA panel has built-in ability to send X10 commands.

Searching around, I found that a guy named Tomi Blinnikka reverse engineered the VISTA-ICM and graciously posted a C# library/app to  to interface with it here: http://bliny.net/blog/post/HoneywellAdemco-Vista-ICM-network.aspx .  Many thanks Tomi!  Looking at his code is pretty interesting because it details how the ICM works by broadcasting UDP multicast packets to communicate what is happening with the alarm.

I wrote several applications that utilize this library to enable me to have full control of my VISTA alarm system.  These apps are running on my “always on” PogoPlug server.

The Solution

  1. AlarmServer – A service /daemon that constantly runs.  It sends notifications on alarm events, and allows clients to connect via named pipes to send commands to the alarm.  It has integrated support for Prowl, so it can send push notifications to iOS.
  2. AlarmClient - A command line client for the AlarmServer.  I use this app in conjunction with a cron job at night to automatically arm my alarm in STAY mode before bed. **
  3. AlarmWeb – An iPhone optimized HTML5 web app that provides a web client for the AlarmServer.  It took several iterations to get this app just how I wanted it but it now works very well.  The display  (i.e. “Ready to Arm”, “ARMED STAY”, etc.) is updated quickly with a long polling request.  Here is what it looks like on my phone:
20110827-102534.jpg

Garage Door Control

What are those “Left / Right Garage” buttons, you might ask.  Pushing those actually open or close (toggle) my garage doors.  Yes, totally cool!  In a nutshell,  I have 2 X10 relay modules (X10 PUM01) hooked up to each of my garage doors.  The VISTA-20P panel has built-in ability to send X10 commands which can control those 2 relay modules attached to my garages.  You must have the optional **1361X10 **transformer hooked up to the VISTA panel to enable it to send the X10 commands.  When I press one of the blue buttons, a command it sent to the panel through the VISTA-ICM module (just like any other command but with a special syntax) and then the X10 signals are sent.  Additionally, I have 2 wireless door transmitters (Honeywell 5816) hooked up to the garage doors so that I can check their status.  If one of the doors is open it shows as a fault on the alarm display and therefore I can see it using my AlarmWeb app.

In action

With all the apps hooked up and running, I am able to do some pretty cool stuff:

Download

For anyone interested, the solution is here: VISTA_Alarm.zip. UPDATE: Please take a look at my updated solution called vistaicm-server.  I have removed / changed all sensitive information (i.e. alarm passwords, IP addresses, Prowl api key, etc.) as I obviously don’t want this info publicly available!

Discuss on Twitter