[RELEASE] Elk M1 Integration

In February 2019 @ekimmagrann posted his Elk M1 integration for Hubitat Elevation that I know others are currently using. He made great strides bringing the two platforms together. For the past month or so I have been maturing his work so that it fits mine and hopefully other Elk owner's needs better. Available on GitHub is my branch of his work. Here are the features the two of us have brought to this version:

Features:

  • Runs locally and fully "on box" for minimal latency and requires no additional hardware.
  • Works with an Elk M1 connected to the local network using an Elk M1XEP Ethernet Expander or C1M1 Dual Path Communicator.
  • Arm Stay, Arm Away, Arm Night, Arm Vacation and Disarm commands for Area 1 are supported if a User Code is assigned.
  • Imports Zones, Tasks, Outputs, Thermostats, Lighting (switches and dimmers) and Keypads (for temperature readings only) as devices.
  • The names of the devices are pulled from the Elk M1's device descriptions during import.
  • Drivers are available for Temperature probes, Motion, Tamper, Smoke, Carbon Monoxide and Water Detectors attached to a zone and many built in or user created virtual drivers can be used with the following capabilities:
    ContactSensor, MotionSensor, SmokeDetector, CarbonMonoxideDetector, WaterSensor, TamperAlert, AccelerationSensor,
    Beacon, PresenceSensor, RelaySwitch, ShockSensor, SleepSensor, SoundSensor, Switch, TouchSensor and Valve
  • The drivers on zone child devices can be changed to one of the above and it will automatically adapt to it.
  • Updates to all device statuses in the Elk M1 are typically reflected in Hubitat Elevation within a second.
  • Updates to Tasks, Outputs, Thermostats and Lighting device statuses in Hubitat Elevation are typically reflected in the Elk M1 within a second.
  • Alarm State (no alarm, burglar alarm, fire alarm, etc.), Arm State (not ready to arm, ready to arm, armed fully, etc.) and Arm Status (disarmed, armed away, armed home, etc.) is available for Area 1.
  • Last User is available with the user number who last triggered an armed or disarmed event.
  • Lock integration can be set to lock or unlock locks when the Elk M1 is armed or disarmed.
  • Implements the ContactSensor capability that shows "open" when the panel is in an alarm state for HSM monitoring or viewing on the dashboard.
  • Implements the Switch capability which can be changed to "on" to arm the panel away and "off" to disarm on the dashboard or can be read for HSM monitoring.
  • Changes HSM Arm Mode and the hub's location mode when the Elk M1 Arm Mode is changed (disarmed, away, night, stay, vacation) and the exit delay expires.
  • Supports zones with normally open, normally closed and EOL termination automatically.
  • The "Enable descriptionText logging" setting on the individual devices control whether or not device status changes write info entries to the HE log.
  • Attempts to reconnect to the Elk M1 if disconnected and will refresh all device statuses upon success.
  • Offers zone, output and task reporting to custom drivers so child devices can register to be updated via the report command when another device status has changed.
    I am using this for a custom door control driver (available) assigned to an output that needs to be aware of the state of the contact attached to the door. Yes, I can click the tile on the dashboard and it will open or close my garage door and the zone status is reflected.

Installation

Instructions are in the GitHub readme.

If you are currently using Mike's version of the app and drivers, you simply need to replace his app and all drivers with the new ones and initialize the Elk device. No devices should need to be removed but new ones can then be imported.

Documentation

The latest features, updates and documentation (when I get around to it) can be found here.

Source

The latest code can be found on GitHub.

1 Like

Dude, this is awesome. Thanks!

1 Like

Thank you captn, I really apprecite all the hard work.
I'm having an issue with the motion sensors, trying to use the as triggers but ever time one is activate I get the following error in the logs and they don't trigger anything.
Any suggestions, thanks in advance,
dpjkw

dev:3562020-06-27 10:46:30.444 pm infoZone 045 - Den Motion Detec is active

2020-06-27 10:46:30.497 pm [error]...device/edit/356)groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.toInteger() is applicable for argument types: () values: [] Possible solutions: toUnique(), toUnique() on line 1640 (active)

@dpjkw1 Are you sure you have the latest drivers from GitHub - thecaptncode/hubitat-elkm1: Hubitat and Elk M1 integration via Elk M1XEP ? Line 1640 of Elk-M1-Driver.groovy should look like this:
if (zoneDevice.currentState("motion")?.value == null || zoneDevice.currentState("motion").value != "active") {

And there is no "toInteger()" method on that line.

I'm using v0.2.5
My line 1640 is the next line
zoneDevice.active()

It shouldn't make any difference but noticed I don't have the blank line 15, but I re-pasted the code and made sure I have the blank line 15, same error but line 1641 now

Thanks

@dpjkw1 Sorry it's taken me so long to get back to you.
Would you please provide more details on the motion device? What driver are you using for it? There may be an incompatibility I need to look into.

No Problem Greg. Thank you for getting back.
I just switched from an ISY-994 controller (which also had direct Elk M1G support) to the Hubitat.
It happens for all my hardwired motion detector zones.
They are just dry contacts back to the Elk M1G
They are updating, because I see "Current status" change from "motion:inactive" to Motion:active", it is not getting passed so it can be used as a Trigger event, i assume it is due to the error
The type is Virtual Motion Sensor and I get there error for all the Elk M1G motion zones
I just used the zone import from the ELK M1 application

Thanks again for the assistance.
Jim

Jim,

Thanks for the info!

I assume then that is it using the system version of Virtual Motion Sensor driver and not a custom user driver. Have you tried editing one of those motion devices and clicking Save Preferences? There could be some issue inside the driver. I have a zone configured with the system Virtual Motion Sensor driver and it works just fine so far.

Greg

Greg

That seem to fix it. I turned on debug logging and hit save preference. No more error and it is triggering now.

Thank you very much for the assist

Jim

Jim,

That's great to hear. Thanks for letting me know. Hope you enjoy your set up.

Greg

Hi Greg,

Thanks for your tremendous work on this, and for continuing on with this effort.

I have an Elk M1 with an M1XEP and a new Hubitat Elevation (C7) running on the latest SW.

I followed the instructions in your github readme file, installing the application code in the Apps Code section and the required Drivers (Driver, Driver-Outputs, Driver-Tasks and Driver-Keypad) in the Drivers Code section.

Upon completing this, I went to the Apps section to "Add User App"... the "Elk M1 Application" is there and I select it. Upon selecting it however, I get the following message:
"Please wait, loading Elk M1 Application"

The above message (with a spinning status animation) continues indefinitely and never completes.

Any ideas on what I may be doing wrong?

When I select "Elk M1 Application" to add it, there's no in between step where I provide additional details such as the M1XEP connection info... it just goes straight to the status message and hangs.

Appreciate any guidance you might have.

Thx!

Darren

Hi Darren. Welcome to the community and thank you!

This is an odd one. Would you please check the Hubitat logs by clicking on Logs, then Show Past Logs, then scroll down to around the time the install attempt was made? There may be an error in the logs that gives a clue. Also, please look in Apps to see if "Elk M1 Application" has been added.

I very much want to know what is going on here.

Regards,
Greg

Hi Greg,

Thanks for the quick feedback.

I've gone in and looked at the installed Apps just to be sure. No, it's not installed.

I reviewed the logs (Past Logs) and nothing is there that would identify the install event or any errors related to that. I even tried installing it again and don't see anything in the logs as a result.

I was hoping to post an image of the perpetual/spinning "Please wait, loading Elk M1 Application" status message but haven't figured out how to post an image here.

I wonder if there's some kind of issue with the latest Hubitat Firmware that is preventing user Apps from installing? I'm on 2.2.3.148.

Thx.

Darren

@mike.maxwell

Have you seen any issue like @Dash2Axle is describing above? I can't imagine anything unusual the app he's installing does. All the installed() code does is a log.info.

Here's a screenshot of the perpetual spinning status message when I add the User App. I left this to run overnight and it stays like this indefinitely.

I hate to be cliche but have you tried rebooting the hub and trying again?

Greg

Hi Greg - ya, I've rebooted a couple times now with no luck. Short of completely resetting it, and setting my stuff up over again, I'm not sure what else to do.

I had also thought about trying to install a different user App, maybe something relatively simple, and see if it also hangs up during the install process.

I would like to avoid a hub reset. That could be a lot of work.

Maybe it would be a good idea to check the app code. In Hubitat, try going to Apps Code, then click on Elk M1 Application. At the top, under comments, does it say:

public static String version() { return "v0.2.5" }

Also, if you scroll all the way down to the bottom, is the last line a blank line right after a comment and is line number 1300?

Hi Greg - thanks for continuing to make helpful suggestions... really appreciate it.

In the App Code, the line with the version shown is identical to what you typed above.

Additionally, I have 1300 lines, with the last line being blank and line 1299 being the end of the comments at the bottom.

I tried deleting all the App and Driver Code, then rebooting the hub, then re-adding the driver and app code, and then adding the User App - no change unfortunately though... I just get the big spinny status message indefinitely again.

What is it supposed to look like/do, after I select to add the Elk M1 App?

Darren

@Dash2Axle,

When you do the Add User App, it should just bring you back to the Apps screen with Elk M1 Application now listed. Clicking on that is what starts the set up process. You aren't getting that far.

I have a suggestion. In Apps Code, click on Elk M1 Application. Starting at line 24 is the definition section. Could you please add the singleInstance: true, line so it looks like the code below (it does end with a comma), click save and try to add the app again?

definition(
	name: "Elk M1 Application",
	namespace: "belk",
	singleInstance: true,
 	author: "Mike Magrann",
	description: "Integrate an Elk M1 Security System",
	category: "Security",
	iconUrl: "",
	iconX2Url: "",
	iconX3Url: "",
	importUrl: "https://raw.githubusercontent.com/thecaptncode/hubitat-elkm1/master/Elk-M1-Application.groovy",
	documentationLink: "https://github.com/thecaptncode/hubitat-elkm1/wiki"
)