[EOL] SimpliSafe Alarm Integration

Port of my SimpliSafe DTH from SmartThings to Hubitat


  • Integration is now End Of Life and is no longer supported or functional due to SS authentication changes.


  • Code optimizations, cleanup and configurable options


  • Improvements to MFA login and Polling


  • Updated Device Handler to try and support MFA

Donations for beer gladly accepted: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5C9KVK6LLLZRC


Reserved #1

Reserved #2

Reserved #3

Are there plans to add this to HPM for greater discovery and update management?

Fantastic! Works great, beer on the way!

Does this support polling if the alarm was armed via the keypads? If so, what is the interval and is it configurable in any way?

Yes, default is 5-min I think, and yes you can edit driver code to insert any schedule you desire. Too frequent puts a strain on the device though

1 Like

I just installed the DTH and created a virtual device. I'm trying to get a handle on how to interact with the virtual device to see what I can do with it.

My alarm system has entry, motion, glass break, and water sensors at the moment. Looking at the virtual device detail I can see statuses for each device category. In HSM I see the device name showing under contacts but not the motion. Is that what I should expect to see?

I was hoping to be able to interact with SimpliSafe via RM so I could arm the system when HE goes into Night or Away. And read the sensor category statuses so I could display them on a dashboard. Is arming or sensor category status possible? If so, how do I interact with my virtual device in RM?

Tom G.

Currently the status for the SimpliSafe sensors does not import for door, window, motion, etc. The attributes you are seeing are mapped to the system itself and any alarms the system may report (fire, water, burglary).

The presence is mapped to if the alarm is set to away. Not present = Away, present = Off/Home

Active / inactive maps to if the alarm is armed or not. Active = armed, inactive = not armed

Open / closed maps to an active alarm. Open = burglary alarm, closed = no alarm

You can interact with SimpliSafe through RM by using custom commands, such as Off/Home/Away

And trigger actions based off the mapped events

1 Like

Thanks for the details. As a toe in the water I wrote a status rule that checks device attributes and shows an alarm status on my dashboard. Other than polling lag it seems to work well.

I would like to next write a rule that arms the system when HE goes into Night or Away mode. I looked at the custom actions selections and the first two seem obvious, I think...

  • For my action I selected: "Set Mode, Variables of File, Run Custom Action"
  • For Which Action: "Run Custom Action"

However, I'm not sure what to select for: "Select Capability of action device" I see that several capability selections expose the device. Regardless of which one I choose they all appear to show the same list of of custom commands: siren, away, strobe, poll, off, home, and both. Does it matter which capability I choose?

UPDATE: I have it working now and it doesn't seem to matter which capability I choose as long as it brings up the correct list of commands. If there is a difference that I'm not seeing and you could let me know I would greatly appreciate it.

Tom G.

Getting the following error:

dev:1212020-12-16 03:46:06.579 pm errorjava.net.URISyntaxException: Illegal character in path at index 51: https://api.simplisafe.com/v1/subscriptions/123456, 4567890/ on line 193 (poll)

I am guessing it is due to the fact that I have two subscription IDs (changed above to protect info) and it cannot handle the code. How can I fix this? Any help is appreciated. Definitely will send a beer or two your way if I get it working!

The app makes a call and gets the first location ID associated with your account. You could hard-code in your location ID for the account you want to use but I'm not sure how visible it is in the new web app.

I don't have multiple accounts so I'm not able to test, but you can try playing around with

 String tsid = response.data.subscriptions.location.sid
		state.subscriptionId = tsid.substring(1, tsid.length() - 1)

Or if you are able to locate your ID, just set it

state.subscriptionId = 12345

So I played around and tried entering this in different areas but still cannot get it to work. Even entering the state.subscriptionID = 12345, it is still giving me an error with the string:

httpGet ([uri: getAPIUrl("refresh"), headers: state.auth.respAuthHeader, contentType: "application/json; charset=utf-8"]) { response ->

Thanks in advance - wish I knew more about programming.

Iā€™m assuming you set it to your ID and not 12345???



Ok, after much trial and error I was able to get it working. I wound up just having to set the subscription ID as a static number with a new instance of the code. Thanks for all the help everyone.

Question in the device settings what does "Both" do? Other buttons seem to be self explanatory.

That button comes from the Alarm attribute built-in to Hubitat. It's expecting that Alarm will be a siren, so that button is to control it. In this case it's not used and can be ignored.

1 Like

Just a heads up there is a error thrown after the token expires and it tries to login for updates:

dev:9662020-12-30 05:08:20.371 pm errorgroovyx.net.http.HttpResponseException: Unauthorized on line 193 (poll)
dev:9662020-12-30 05:08:20.066 pm infoExecuting polling...
dev:9662020-12-30 05:08:20.062 pm infoExecuting login...
dev:9662020-12-30 05:08:20.061 pm infoToken has expired,