While there are a bunch of integration options for the DSC / Honeywell / Ademco alarm panels, none quite fit my needs: keep traffic on my local LAN, offer async updates and are easy to install and configure. At the risk of offering yet another Envisalink integration option, set out to solve this and hopefully help others. Obviously leveraged much of the good work from kholloway, MattTW and oehokie.
Provides integration support for a Honeywell / Ademco Vista 20p alarm panel, connected to an Envisalink 3/4 module over local LAN (or AlarmDecoder AD2USB), supports automatic zone discovery, asynchronous status updates with support for the following zones and actions;
- Zone Support
- Door, Window Contact
- Motion Sensor
- Smoke Detector
- Actions
- Arm Stay
- Arm Away
- Instant Arm
- Disarm
- Chime
- Zone Bypass
- Output Trigger 1 and 2
And the following requirements / dependencies:
- Honeywell / Ademco Vista 20p alarm panel
- Envisalink 3.0, 4.0 module -OR- AlarmDecoder AD2USB
- Installed and configured SmartThings Node Proxy: GitHub - redloro/smartthings: SmartThings home automation services, apps and devices
** Update 03/12/2021 **
- The short story is that this integration is NO LONGER BEING MAINTAINED; please feel free to clone the repo and carry it forward!
- The long story is that ever since ST rolled out the new app and basically broke support for tons of integrations (including this one), I waited, waited and tried many times to find a good enough solution for all of us to enjoy. Unfortunately that never came and I decided earlier this year to explore other home automation options… and I found one that fits the bill perfectly… Home Assistant. The system is stable, flexible and growing in the way all of us had hoped ST would. The great news about Home Assistant is that there are tons of integrations available, including support for this one: Envisalink - Home Assistant. For those of you who are worried about your Z-Wave/Zigbee devices, what I have done is continue to use the ST Hub as the Z-Wave/Zigbee bridge and use the Home Assistant - SmartThings integration to control everything. I can’t tell you how happy I have been with the Home Assistant platform, capabilities, community, everything… it’s pretty amazing. If you’re like me and frustrated with the current status of ST, give it a look… you won’t be disappointed. It’s been a lot of fun!
Update 07/29/2017
- Added support for Output Triggers 1 and 2
Update 02/27/2017
- Plugin support for Alarm Decoder devices; AD2USB has been tested and verified.
Connecting to a Local LAN Device with Async Updates
Realized that I needed a good framework to offer outside integration with SmartThings, so decided to write a proxy service in Node, making local LAN integration with SmartThings easier, offering async update support, as well as the flexibility to connect to devices via USB, serial, etc which are not natively supported by SmartThings. Connectivity to the Honeywell / Ademco alarm panel is provided by a plugin to the proxy service (SmartThings Node Proxy) - basic schematic of how this is wired together is provided below. Mode details on the proxy service, how to get it installed and configured in under 5 mins is available here: GitHub - redloro/smartthings: SmartThings home automation services, apps and devices
SmartThings Hub <-> SmartThings Node Proxy <-> Envisalink/AlarmDecoder plugin <-> Envisalink/AlarmDecoder module <-> Honeywell / Ademco Vista panel
Installation
Since the Honeywell Security SmartApp communicates with the alarm panel via the SmartThings Node Proxy, make sure that you have the proxy and the Envisalink / AlarmDecoder plugin installed and working before adding the SmartApp and Devices to SmartThings.
- SmartThings Node Proxy + Envisalink/AlarmDecoder plugin installed and configured on a machine; machine is connected to same local LAN as Envisalink module in alarm panel (or AD2USB)
- Create a new SmartApp and use this code: smartthings/honeywell-security.groovy at master · redloro/smartthings · GitHub
- Create 4 new Device Handlers and use this code: smartthings/devicetypes/redloro-smartthings at master · redloro/smartthings · GitHub
- honeywell-partition.groovy
- honeywell-zone-contact.groovy
- honeywell-zone-motion.groovy
- honeywell-zone-smoke.groovy
- Add the Honeywell Security SmartApp from the SmartThings marketplace
- Configure the SmartApp
- SmartThings Hub: REQUIRED
- SmartThings Node Proxy: REQUIRED to connect to the SmarThings Node Proxy
- Envisalink Vista TPI: OPTIONAL to connect to the Envisalink module
- Security Panel: OPTIONAL code used to arm/disarm the panel
- Smart Home Monitor: OPTIONAL integration with SmartThings Smart Home Monitor
- Done! Note that all the zones defined in config.json will be loaded 10 seconds after the SmartApp is configured and all the devices should show up under your Things. If the zones/devices do not show up, simply open the SmartApp again and hit done to force a refresh of the zones/devices.
Enjoy…
FAQ
Going to cover a couple questions here to hopefully aid others in their quest to get this setup.
-
Do you have an installation video?
Why as a matter of fact I do… SmartThings Node Proxy - YouTube -
What the heck is Node?
Node is awesome! https://nodejs.org -
What the heck is JSON?
JSON… pronounced like the name Jason (JAY-sun) is also awesome… http://www.json.org/ -
Why do I need SmartThings Node Proxy?
If you want to direct connect your EVL to SmartThings and not go through the SmartThings Cloud, you need STNP. It registers with the EVL and monitors for alarm events and passes these notifications directly to the SmartThings Hub. So all traffic stays on your local LAN and notifications happen in near-realtime. -
How does SmartThings Node Proxy connect with the EVL and the SmartThings Hub?
-
What do I need to do to get this running?
- Forget about SmartThings for a second… we’ll come back to that.
- First things first, let’s get SmartThings Node Proxy installed, configured and working.
- Identify a host machine on your network that can run NodeJS
- Download and install NodeJS from here: https://nodejs.org
- Download SmartThings Node Proxy and place in a target folder on your machine (ie.
/home/smartthings-nodeproxy
) - Create a subfolder called plugins (ie.
/smartthings-nodeproxy/plugins
) - Move envisalink.js from
avail_plugins
to your newplugins
folder - Copy the contents of
config.json.sample
and paste them here: http://jsonmate.com/ - Edit the document so that it matches your configuration… remove all comments (anthing starting with
//
) and then click “Beautify”. - Create a new file named
config.json
in your SmartThings Node Proxy folder - Copy the contents of the json document into
config.json
- Install dependencies by running:
npm run install:envisalink
-OR-npm run install:ad2usb
- Fire up the server by typing:
npm run start
- Make sure that it connects with the EVL and you should start to see alarm system events like motion sensors and door sensors reporting, etc.
- Now we can move on to setting up the SmartApp and Devices in SmartThings…
- How do I know it’s running?
When you start SmartThings Node Proxy you should see something like the following:
$ node server.js
SmartThings Node Proxy listening at http://:::8080
Loaded plugin: envisalink
Connected to Envisalink at 192.168.2.32:4025
{"type":"partition","partition":1,"state":"ready","alpha":"****DISARMED**** Ready to Arm"}
-
What’s all this nonsense about restart.me and forever??
You can honestly ignore all that if it doesn’t work or you are having issues getting it run.restart.me
is a script that I created to make starting/restarting the service easy, but it may only run on specific operating systems.forever
is a Node module that allows you run a Node application continuously… sort of like a service. -
But how do I run SmartThings Node Proxy unattended or guarantee that it runs on startup?
While I don’t have a solution to that here, there are many solutions available online for wrapping a Node app into a service that auto-starts, etc. and it all depends on your host operating system. Google is your friend: http://bfy.tw/8Qp9. For Windows users, the simplest is to probably create a shortcut to “node server.js” and put that in your startup folder. -
What are all these password and code fields in the config.json?
Good question and I’m often left wondering the same… like what the heck was I thinking when I wrote this?? But here it is… -
authCode
is a passcode you set for the SmartThings Node Proxy to prevent unauthorized access to SmartThings Node Proxy from anybody/anything who could be snooping around your local network and happen to stumble upon SmartThings Node Proxy listening on port 8080. It’s not Ft Knox but it’s not meant to be… just a basic passcode to keep everyone out. NOTE: this is the passcode you have to use during the SmartApp configuration to allow the SmartApp to communicate with SmartThings Node Proxy. -
password
is the password required to access the EVL. The default on the EVL isuser
-
securityCode
is your 4 digit (or whatever) code you enter on the alarm panel to arm/disarm. We need this code so that you can arm/disarm from SmartThings. -
installerCode
PLEASE DO NOT USE THIS… I have actually deleted this from the sample config.json. It’s risky and there’s a 50/50 chance it leaves your alarm panel in a state that will require an installer to get out of. I’ve only tested this on my panel at home and while it works and saves me maybe 10 mins of configuration, it’s really not worth the risk.
Let me know if there are any other gotchas, questions, etc so that I can add them to this list.
Thanks!