ADT Integration

Smartthings Community I’ve seen tons of people talking about integrating ADT into Smartthings. I’ve seen several threads where users were setting up computers to route the data into smartthings. I personally thought this approach was expensive and required a lot of hardware for such a small task. I went down the path of building an Arduino card integration. I’ve been promising notes / pictures for weeks but still haven’t gotten the chance. However, I did want to post some high level steps on how I performed the task with the plan of posting more details later on.

Supplies:

  1. AD2pi module [http://www.alarmdecoder.com/catalog/product_info.php/products_id/33]. This Raspberry pi card is programmed to interface with an ADT system (specs can be found on the website) through an inbound / outbound serial connection.

  2. Arduino Mega card. Mega is required because both the AD2pi and Smartthings shield require serial ports and the UNO only has one serial port.

  3. Smartthings shield to interface between the arduino card and the smartthings app.

  4. wire (to connect the AD2pi card to both the Arduino card and your ADT panel).

Code Examples

GitHub Gist Link <-- A total of 3 files (Arduino Code, ST App, ST Device Type)

Instructions

  1. Call ADT and ask them to ignore all alarms for the next X hours.
    This will ensure you do not accidentally call the police when you
    (and you will) set off the alarm.

  2. Kindly ask your Wife (or Husband) to go shopping. You’ll thank
    yourself when you don’t have to deal with the complaints as the
    sirens go off when you trigger the alarm (and you will).

  3. Connect the AD2pi to the ADP panel. Please read and
    understand your ADT panel wiring. Also please follow all safety
    steps as this is a live circuit. I did wire my system hot (so it
    can be done) but realize what risks you are taking.

    HINT 1: All four connections do need to be wired (learned that after
    troubleshooting for awhile) even through 2 connections are related
    to power and not communication and the AD2pi will get power from
    your arduino card. I believe this is due to ensuring shared ground
    for proper circuits.

    HINT 2: You may need to configure a new panel address within your
    ADT system. This should match the address configured as part of
    your AD2pi There are tons of instructions online on how to do this.
    You can also find the “installers” code on numerous websites.

  4. Connect the AD2pi serial ports to your Arduino card (as
    configured in your Arduino program). Also connect the power (5v /
    Grd) from the AD2pi card to the appropriate pins on the Arduino
    card.

  5. Program Arduino card to be a straight pass through of
    information (in both directions) between two serial ports.

    HINT: Both Smartthings and Arduino have great tutorials on how to
    get started in programming an Arduino card. I had never done any of
    this before starting this project and was able to figure it out
    after a few hours of playing around.

  6. Build out a customer device type that properly handles all
    of the alarms based on zones. ADT has tons of manuals explaining
    all the response codes you get from a panel. I found this extremely
    helpful in understanding the base faults. To figure out what zones
    applied to what triggers I simply would fire an alarm (i.e. open a
    door, run in front of a motion sensor, etc.) see what alarm code
    would show on smartthings and build out that tile (device). Once
    again I’d never programmed in Groovy before this project. I read
    through forums, reviewed the tons of device type examples, etc. to
    figure out how Smartthings operated and how to modify the code for
    what I was trying to accomplish.

  7. Program custom buttons / commands for special things. I
    programmed the ability to turn on / off the chime on my alarm (in
    case one person was coming home late). I don’t have much use for
    it, but I could see programming quick buttons for disarming certain
    zones, manually triggering alarms / sirens, etc.

  8. I configured fake / “Ghost” device types for all my doors,
    motion sensors, etc.

  9. I wrote a custom app that reviewed the individual sensors
    within the “ADT” Device type and triggered mirroring states on the
    ghost device types. This allows me to use trigger modes / apps as
    if each individual door was an individual sensor within the
    Smartthings environment.

6 Likes

Just as a general note. My Arduino code has a ton of “debugging” code and several branches of features I didn’t end up using. Since this card sits in a storage area within my basement and “just works” I haven’t had the desire to go clean this code up. I apologize to anyone digging through the mess trying to customize it for their own use!

Hi @craig ,
Using this implementation - do you have any wonky or inconsistent behavior like some of us experience using the Envisalink-3 and AlarmServer? When you look at the activity feed of a specific sensor are you only getting activity alerts that pertain to device events (open/close/warn etc) or do you see lots of additional communication garbage? Are you able to use sensors as individual trigger devices for other actions? Do sensors instantly respond when opened/closed? Is there any lag? Do you know if it’s possible to use an IP alarm monitoring service with your setup (as opposed to ADT)? Thanks so much for answering some of these questions - I am not very happy with the overall usability of the current AlarmServer implementation for SmartThings and would love a solution that “just works” as you put it. Thanks!

Best,
Matt

@mbial Let me try to answer these in order. If I miss one let me know.

Do I see anything wonky come through the communication?

It has been awhile since I wrote this so I’m trying to remember the exact information. I believe I did see random communication on the system. I believe I handled this with my Arduino card by filtering anything that started with “RFX:”

Do I see other things for a device feed other than a legit state.

This is where my installation is fundamentally different than the AlarmServer. Since I use an Arduino card all of my devices fall under a single DeviceType (SmartSheild). Since you can’t trigger apps / events from sub devicetypes [yet] (i.e you can’t have 3 contact sensors all used in apps for a single deviceType) I had to handle this in a different manner. What I did was wrote a custom App that listens to the specific capabilities within my smartShield, when a state changes it sends a state change command to a “Ghost” DeviceType that I configured that’s not actually configured for any real sensor. This allows my individual sensors on my SmartSheild to control Sensors that ST understands. I will be honest, the addition of the new dashboard hasn’t played super nice with my app but I’m sure that’s on my and not STs - I honestly haven’t had time to attempt to get that resolved.

Do your sensors instantly respond

Yes and No. The Shield gets a response very quickly (as fast as the panel gets the command). However, since I use the app to trigger individual deviceTypes there is a lag while the application triggers the event. Although not instant it happens as fast as any other app event change. I’ve noticed that if several alarms are triggered at the same time that lag extends but honestly how often does that happen. (FYI - when I say lag I’m talking about maybe 1-2 seconds max).

IP alarm monitoring

I’m not 100%, but I’m pretty sure the answer is Yes. In fact I bought a DCS-100 board to accomplish exactly what you are talking about but found out the hard way that ADT is not compatible - and I had the card too long to return! So if you want to give it a try I’ll sell you the cards at a large discount! The setup was going to be slightly different. DCS → RS-232 → Ardiuno → Shield but the concept should all be the same. RS-232 can get a little tricky because you have to consider DTE to DCE transmissions.

@craig I wonder if you can help me. Before seeing your post, I went out and bought an AD2PI along with a Raspberry Pi, and have successfully connected it to my Ademco security panel. The Alarmdecoder webapp (running on my Raspberry Pi) is working great, and from any computer connected to my LAN, I can open up the Alarmdecoder webapp in a browser and see/control my alarm system. The webapp log keeps all the events (door open, door closed, etc.).

Now, I’m trying to integrate this with my Smartthings hub. I don’t think this should be that difficult since I already have all of the alarm events visible and controllable in a webapp (so, I guess I don’t need AlarmServer?), but I am clueless as to how to integrate this with Smartthings.

Do you think you could help me with this? I would really appreciate any help you could give me!

Thanks!

@griswold - I promise I’m not ignoring you. As soon as I get some free tie I’ll respond to you.

Quick (2 second answer) - I think you’ll have to go through a arduino card / SmartShield. I know that LAN communication to the ST hub is possible but honestly I’m not personally skilled enough to do that.

@craig: I may go ahead and buy the Arduino Shield and the Arduino Mega cards and replicate your setup. Can you help me understand, though, where each part of your code runs? What code do you upload and run on the Arduino? One thing that I have never understood (and that shows how ignorant I still am with Smartthings apps) is where the code runs - does something need to run on the Smartthings hub? Do I need another server somewhere on my network that will run code? I would appreciate a tiny bit more “handholding” with what to do exactly with your code. Thank you!!

@griswold Your code question is some what of a “trick” question! If you go to my github site (mentioned in original post) it has 3 segments of code.

1: Code runs on Arduino card itself. This code tells the card how to read the incoming communication, how to route it back to STs, etc.

2: Code that creates the deviceType within STs. This code is what defines the actual “Thing”.

3: Is app code. This is completely optional but is what allows you to memic individual devices for each sensor in the home.

For #1, the code runs locally on the Arduino card. For #2 / #3, this code runs in the STs cloud and not actually on your hub. I’m assuming you’ve setup and played with the IDE in the ST developer area. If you haven’t poke around there and hopefully it will become more clear.

I don’t mind helping out with your code / working with you to get things working. as an FYI - I’m out of the country until 1st week of Sept so I will most likely not answer anything until then.

Good Luck!

Sorry for yet another noob question, but your original Step 4 above (“Connect the AD2pi serial ports to your Arduino card (asconfigured in your Arduino program). Also connect the power (5v/Grd) from the AD2pi card to the appropriate pins on the Arduino card.”), can you help me identify which pins exactly on the AD2PI need to be connected to which pins exactly on the Arduino Mega?

About to get started on this myself. The AD2PI card I have doesn’t use 5V for operation (the pins effectively route to nowhere). Per the AD site, only the 3.3V, GND, Rx and Tx are needed from the Arduino side of things. More here, though Raspberry Pi focused:
http://www.alarmdecoder.com/wiki/index.php/Beaglebone_Black

Arduino Mega Pinout:
http://pighixxx.com/megapdf.pdf

Raspberry Pi Pinout (mates with AD2PI):

Hi @craig,

Nice integration project!! From your comments, it looks like we had similar experiences integrating our alarm panels. I was about halfway through my project when you published your code, which was helpful to finish my project. Thanks for sharing. In the end, I was able to add a few enhancements and do not have all the debugging code in my release. In case you or anyone is interested, I published my code base on github.

For those trying this for the first time, I have also included some additional installation instructions as well.

Enjoy

Thanks for posting this code. I can use it for a friend who has the ADT system, and wants to add ST into his environment

Wow - these instructions are great! It looks a lot less complicated laid out like this. My ADT system is still active and monitored,I’m guessing this wouldn’t lead to any problems with ADT.

I the tiles I only see zones - wondered if you had any ADT motion sensors connected and whether they would work as well?

Hi e8link,

Yes, this is a pretty simple approach to integration. I have been running my system a few months while still maintaining my ADT monitoring service. No phone calls from them yet! I am not sure they can tell since you are basically wiring the AD2Pi in parallel with your keypads.

Good luck with the project and thanks for the feedback.

If I am not mistake the ADT security system uses the Honeywell Vista 20P security panel. If so, Honeywell makes a module called the 4232CBM. This allows RS232 communication to the panel via serial:

http://www.security.honeywell.com/hsc/products/intruder-detection-systems/expansion-module-accessories/accessories/310799.html

Hello,

Is the same possible for a GE Interlogix SIMON 3, XT, XTi? I have a working Simon 3 panel that is currently not monitored. Simon 3 uses the same sensors as XT & XTI. I would like SmartThings to be the controller for this.

1 Like

These instructions are great - thank you! I have one question, though - I have a Vista 20HWSE, and all panels need to be configured to use Address 31. The AD2PI comes configured to use Address 16 by default. Do you know how to change the address that the AD2PI uses?

Hi therockhr,

ADT installs a number of different panels depending on where and when you had your home alarm installed. As you mentioned, for later versions of the Honeywell panels, they do offer a serial board. In my case, the board was not back comparable with my Vista10SE. On the other hand, AlarmDecoder claims their ad2pi is compatible with all Honeywell/Ademco panels and therefore provides a more universal solution.

Hi @griswold
I just pushed some new code to my github site that will give you the ability to set the device address for the AD2Pi. You will need to download both the Arduino sketch and the Device Type for this to work.

The code is on my master branch

Once you send the code to the Arduino and replace the device type code (don’t forget to publish), you can configure the AD2Pi address.

I tested on my device with no problems. let me know how it works.

Thanks to Sean at AlarmDecoder who was following your request and provided the initial code to get this going.

A bit over a year ago we moved into a house that was already wired with an ADT system. There are various types of sensors throughout the house. We’re not subscribing to ADT but I’d love to make use of them.

The catch is that I know nothing about ADT systems. I know there is a locked metal box on the wall in the basement but we don’t have a key for it. Are there any good sites out there where I can educate myself about interfacing with it? Once I figure out how to get the panel open… :smile: