ADT Pulse integration

A large number of ADT customers are using ADT Pulse, which is basically some sort of home automation system that ADT is trying to offer. This system comes with a Honeywell TSSC-BASE station (gateway/hub connected to LAN) and a Honeywell TSSC-KP (wireless keypad), on which there is more info here: https://www.adt.com/content/dam/adt/downloads/manuals/800-13959-D_TSSC_System-ug.pdf

However, even though ADT uses Z-wave, and I have a Aotec Zwave Gen5 stick plugged in and running on my Rpi, HASS is not detecting the door/window sensors, motion sensors, smoke detectors, and sorts. It did detect the GE light switch that came with the ADT system though.

As a user, it is also important that HASS is able to detect the current status of the alarm system and is able to ARM/DISARM the system. That way, users can use automation to change the alarm status or be notified if one of the sensors is triggered.

Extensive searches on Google have not resulted in any existing solution/integration for ADT Pulse; only for older system with the AD2pi or AD2usb solutions. Integrating HASS with the ADT Pulse hub would provide great value to ADT customers and HASS users, since users would be able to control many devices using the Honeywell TSSC-Base as a hub (and therefore would not have to buy another hub)…

[Edit: 2017-01-23] I found more info on the units:

  • Zwave frequency is 908.42 MHz
  • WiFi frequency is 344.92 MHz (supporting 802.11 b/g/n)
  • it should be running TSSC open source software
  • Here are pictures of the internal module: https://fccid.io/document.php?id=2923004. Diagrams and more FCC ID testing reports and info can be found here.

There is now a first implementation of an ADT Pulse bridge for Home Assistant using MQTT that I recently ran into but have not had a chance to test.

Here’s the link for reference: https://github.com/digitalcraig/adt-pulse-mqtt

Hope this helps!

1 Like

How is this add-on installed? I get an error trying to install via Hassio.

Hi everyone.
Based on the work from https://github.com/digitalcraig/adt-pulse-mqtt I got it working.
I added zone support and disarm as well. Arming is a bit challenge. All suggestions welcome.

1 Like

I was able to install this and can access the arming status. How do I create zone sensors? I tried the below unsuccessfully.

sensors:
- platform: mqtt
  name: "ADT Zones"
  state_topic: "adt/zone"
  payload_available: "open"
  payload_not_available: "closed"

I updated the documentation with the following.
I’m limited with what I have as zones in pulse, I don’t know what other types of zones out there. If you provide your MQTT dump (for the zones). I’ll try to add the support for it.

After running the add-on, to list all the zones found, you can call:

# mosquitto_sub -h YOUR_MQTT_IP -v -t "adt/zone/#"

Add the following to the configuration.yaml for each zone:

  - platform: mqtt
    name: "Kitchen Door"
    state_topic: "adt/zone/Kitchen Door/state"
    payload_on: "devStatOpen" # Use devStatTamper for shock devices
    payload_off: "devStatOK" # 
    device_class: door
    retain: true
    value_template: '{{ value_json.status }}' 

Note: State topic names come from your Pulse configuration.

I don’t know where to run that command. However, here’s an old json string from when I was messing around with the pulse website. I think it has what you need.

{"items":[{"state":{"icon":"devStatOK","statusTxt":"Z1 Entry Doors - Closed\nLast Activity: Today 9:38 PM","activityTs":1522719523169},"deprecatedAction":"launchDetailsWindow('WjEgRW50cnkgRG9vcnM=','1')","id":"sensor-9","devIndex":"E1VER1","name":"Z1 Entry Doors","tags":"sensor,doorWindow"},{"state":{"icon":"devStatOK","statusTxt":"Z2 Master Bedroom - Closed\nLast Activity: Today 2:12 PM","activityTs":1522692752814},"deprecatedAction":"launchDetailsWindow('WjIgTWFzdGVyIEJlZHJvb20=','24')","id":"sensor-10","devIndex":"E2VER1","name":"Z2 Master Bedroom","tags":"sensor,doorWindow"},{"state":{"icon":"devStatOK","statusTxt":"Z3 Front Windows - Closed\nLast Activity: 1/22 5:45 PM","activityTs":1516661127558},"deprecatedAction":"launchDetailsWindow('WjMgRnJvbnQgV2luZG93cw==','672')","id":"sensor-11","devIndex":"E3VER1","name":"Z3 Front Windows","tags":"sensor,doorWindow"},{"state":{"icon":"devStatOK","statusTxt":"Z4 Bedroom Windows - Closed\nLast Activity: Today 11:39 AM","activityTs":1522683580688},"deprecatedAction":"launchDetailsWindow('WjQgQmVkcm9vbSBXaW5kb3dz','24')","id":"sensor-12","devIndex":"E4VER1","name":"Z4 Bedroom Windows","tags":"sensor,doorWindow"},{"state":{"icon":"devStatOK","statusTxt":"Z5 Back Doors - Closed\nLast Activity: Today 10:03 PM","activityTs":1522721012182},"deprecatedAction":"launchDetailsWindow('WjUgQmFjayBEb29ycw==','1')","id":"sensor-13","devIndex":"E5VER1","name":"Z5 Back Doors","tags":"sensor,doorWindow"},{"state":{"icon":"devStatOK","statusTxt":"Z6 Family RoomMotion - Okay\nLast Activity: 1/22 5:41 PM","activityTs":1516660888847},"deprecatedAction":"launchDetailsWindow('WjYgRmFtaWx5IFJvb21Nb3Rpb24=','672')","id":"sensor-14","devIndex":"E6VER1","name":"Z6 Family RoomMotion","tags":"sensor,motion"},{"state":{"icon":"devStatOK","statusTxt":"Z7 Laundry Room Smoke - Okay\nLast Activity: 1/24 12:25 PM","activityTs":1516814740261},"deprecatedAction":"launchDetailsWindow('WjcgTGF1bmRyeSBSb29tIFNtb2tl','672')","id":"sensor-8","devIndex":"E7VER1","name":"Z7 Laundry Room Smoke","tags":"sensor,fire"}],"id":"hvwData","ts":1522722265582}

try adding the following for the entry door:

- platform: mqtt
    name: "Z1 Enrty Doors"
    state_topic: "adt/zone/Z1 Enrty Doors/state"
    payload_on: "devStatOpen" # Use devStatTamper for shock devices
    payload_off: "devStatOK" # 
    device_class: door
    retain: true
    value_template: '{{ value_json.status }}'

Thanks. I actually followed your example last night and got all of the zones working.

I got this working tonight. Thanks. Can you tell me how to add a sensor or the status to a dashboard. I can see it in the log but how do I get it to show up as a switch?

I actually got the alarm hub to work but trying to get my door sensors to work. This is the dump i got.

adt/zone/Living Room Motion/state {“id”:“sensor-21”,“devIndex”:“10VER1”,“name”:“Living Room Motion”,“tags”:“sensor,motion”,“status”:“devStatOK”,“statusTxt”:“Living Room Motion - No Motion\nLast Activity: Today 9:00 PM”,“activityTs”:1532052018125}

adt/zone/Garage Door/state {“id”:“sensor-4”,“devIndex”:“E2VER1”,“name”:“Garage Door”,“tags”:“sensor,doorWindow”,“status”:“devStatOK”,“statusTxt”:“Garage Door - Closed\nLast Activity: Today 8:07 PM”,“activityTs”:1532048845535}

adt/zone/Hall Smoke Detector/state {“id”:“sensor-13”,“devIndex”:“E9VER1”,“name”:“Hall Smoke Detector”,“tags”:“sensor,fire”,“status”:“devStatOK”,“statusTxt”:“Hall Smoke Detector - Okay\nLast Activity: 6/3 4:06 PM”,“activityTs”:1370293597007}

adt/zone/Living Back Door/state {“id”:“sensor-20”,“devIndex”:“E6VER1”,“name”:“Living Back Door”,“tags”:“sensor,doorWindow”,“status”:“devStatOK”,“statusTxt”:“Living Back Door - Closed\nLast Activity: 7/15 9:10 AM”,“activityTs”:1531663826144}

adt/zone/Master Bedroom Window/state {“id”:“sensor-17”,“devIndex”:“E3VER1”,“name”:“Master Bedroom Window”,“tags”:“sensor,doorWindow”,“status”:“devStatOK”,“statusTxt”:“Master Bedroom Window - Closed\nLast Activity: 3/12 2:01 PM”,“activityTs”:1394650877919}

adt/zone/Office Dining Kitchen/state {“id”:“sensor-19”,“devIndex”:“E5VER1”,“name”:“Office Dining Kitchen”,“tags”:“sensor,doorWindow”,“status”:“devStatOK”,“statusTxt”:“Office Dining Kitchen - Closed\nLast Activity: 4/27 12:29 PM”,“activityTs”:1524850184624}

adt/zone/Side Bedroom Window/state {“id”:“sensor-18”,“devIndex”:“E4VER1”,“name”:“Side Bedroom Window”,“tags”:“sensor,doorWindow”,“status”:“devStatOK”,“statusTxt”:“Side Bedroom Window - Closed\nLast Activity: 4/1 11:50 AM”,“activityTs”:1427907044580}

adt/zone/Indoor Camera/state {“id”:“camera-23”,“devIndex”:“C7BA73”,“name”:“Indoor Camera”,“tags”:“camera,ip”,“status”:“devStatOKcamera”,“statusTxt”:“Indoor Camera\nLast Activity: Today 8:54 PM”,“activityTs”:1532051694928}

adt/zone/Front Door Camera/state {“id”:“camera-24”,“devIndex”:“CD849C”,“name”:“Front Door Camera”,“tags”:“camera,ip”,“status”:“devStatOKcamera”,“statusTxt”:“Front Door Camera”,“activityTs”:0}

adt/zone/Lamp/state {“id”:“lighting-22”,“devIndex”:“2”,“name”:“Lamp”,“tags”:“lighting,switch,zw”,“status”:“devStatOffline”,“statusTxt”:“Lamp - Offline\nLast Activity: 12/9 11:41 AM”,“activityTs”:1449682868135}

but when i do this

#ADT section
alarm_control_panel:

  • platform: mqtt
    name: “ADT Pulse”
    state_topic: “home/alarm/state”
    command_topic: “home/alarm/cmd”
    payload_arm_home: “arm_home”
    payload_arm_away: “arm_away”
    payload_disarm: “disarm”

sensor:

  • platform: mqtt
    name: “Garage Door”
    state_topic: “adt/zone/Garage Door/state”
    payload_on: “devStatOpen” # Use devStatTamper for shock devices
    payload_off: “devStatOK” #
    device_class: door
    retain: true
    value_template: ‘{{ value_json.status }}’

2018-07-21 04:57:17 ERROR (MainThread) [homeassistant.config] Invalid config for [sensor.mqtt]: value is not allowed for dictionary value @ data[‘device_class’]. Got ‘door’. (See ?, line ?). Please check the docs at https://home-assistant.io/components/sensor.mqtt/

if i blank out door then i it says none… what do i do.

nvm i removed device_class and it worked great!

So I got around to testing the arming and disarming functionality. Sending “arm_home” payload works as expected, and so does “disarm”. However when sending “arm_away” payload, according to my ADT Pulse portal history log, a DISARM action is performed.

The issue appears to be a misspelling of the “action” variable in the last condition of the below code:

 if (msg =="arm_home"){
      action= {'newstate':'stay','prev_state':prev_state};
  }
  else if (msg ="disarm") {
     action= {'newstate':'disarm','prev_state':prev_state};
  }
  else if (msg ="arm_away") {
    actio = {'newstate':'away','prev_state':prev_state};
  }

@haruny I created a pull request to fix this.

@haruny, just an FYI and something to think about…

Prior to using this add-on, I had created and used a process that used curl with shell_command in order to retrieve and store tokens and get sensor data. This worked well, but at one point the process stopped working because the url endpoint changed…

From
https://portal.adtpulse.com/myhome/9.7.0-30/
To
https://portal.adtpulse.com/myhome/9.7.0-31/

So some thought will need to be given to making what appears to be a version number dynamic instead of hard-coded, and be able to detect and anticipate the change.

Thank you so much for the bugfix!

Re: Urls, yes, I realized that too. It’s in my todo list.
When you call https://portal.adtpulse.com/, it throws a redirect to the right path. It would be possible to parse it and construct the new url from that point.

I also need to fix arming away/stay modes. It’s still not working.

Sure thing. Any idea how long it takes before the Hass.io dashboard registers that there is an update? Does the version number in config.json need to be changed for that to occur?

I didn’t bump the version number yet. I’m trying to add adding smartthings support overall. Adding a few files and instructions. I’ll bump it today.

Re: how hassio catches the update.
I’m wondering the same thing. I bump the version number and was never patient enough to wait and see how long it takes to take it. I always, uninstall -> remove repo -> add repo -> install

Before your reply I did the uninstall -> remove repo -> add repo -> install thing and arm_away still sent a disarm message. So I’m guessing the version bump is required for it to re-sync files.

Give me couple of minutes, I’m about to bump the version #.

Sure. And thanks for your work on this.