[RELEASE] Zooz Universal Relay (ZEN17)

There’s a driver available for this device on Zooz’s Edge Driver Channel.

Most of the information below is for the old Groovy Handler which will stop working soon.

This is a device handler for the Zooz Universal Relay (ZEN17).


I am among the many who are grateful for this work! After fumbling around for a while trying to disengage the relays from the inputs I came back to this post and read the bullets in this post. The nice surprise was that after setting both input types to “Water sensor”, the two new devices did actually get created in the same room as the rest.

Thank you!

If you removed the device after changing those settings then that’s the expected behavior, but if not then ST must have fixed that bug.

Not sure if anyone can help on this, but I thought I’d try.

My general setup is that all my Z-wave devices run through my Smartthings hub and then my ST hub is also integrated to my Home Assistant (I use both… long story). I have had lots of Z-wave light switches that all report their state to HA without any issues. I recently setup a zooZ Zen17 relay that does not report it’s state to HA (Home Assistant).

I can create a switch in HA and it works just fine to turn the relay on/off. If I turn the relay on via ST, it reports state to my Alexa app and visa versa. All of this works great except the state is never reported to HA. Any ideas what I can do to change this or troubleshoot?

A child switch gets created for each channel and switch on/off events are created for them when they’re turned on/off. If Alexa is showing the correct state for those child devices then those events are being created and the problem you’re seeing has nothing to do with the DTH.

Thank you for creating the handler.
THe hub is V3 US and the Zen 17 handler is v1.0 from github. The child handlers are not created when adding the device, only the main one is installed and it does switch on and off, so it is connected and communicating, just none of the specific relay switches are defined.

Looked around here and poste with Zooz but not found solution as yet.


SmartThings didn’t assign the DTH during inclusion so you need to go into the IDE and manually change it the Type field.

Once you’ve done that you might need to open the device’s settings in the mobile app and change one of them to force the child devices to get created.

Thanks for the donation, but I assist all users having problems with the DTHs I’ve written without needing anything in return and I haven’t accepted it yet so PM me if you’d like me to return it.


Thank you for the prompt reply. I logged into the account.samsung.com account and changed to device type via the web panels. The child devices are now recognized and operating.

Just curious as a noob, is adjusting device attributes via IDE like type a common task when adding new devices?

Your 2nd screenshot shows the relay’s child devices, but if the original handler created them then you’ll need to delete them and if my handler created them then you’ll need to change the filter on the devices screen in the mobile app because they weren’t assigned a room.

SmartThings messed up the handler assignment feature for inclusion a while ago so devices frequently join with a built-in handler instead of the custom handler.

Normally the simplest fix is to just change the Type field, but child devices complicate things so you might be better off removing the device and joining it again.

I’ve found that using the “Scan QR Code” method of joining the device works best, but it still might take 2-5 attempts to get it to join with the correct handler. When the device joins with the custom handler it will display the correct name.

What a dunce. I mistyped the comment. The device is working NOW
The child devices are NOW recognized and operating

The child devices are not recognized and operating

typo fixed

Noob question - Zoom is the hardware vendor for the Zen17. Since the only apparent published manner to integrate this device with ST hub, should I come here for issue related to the interface?

The “child switch” was populated when the device was added. There are so many different types, which ones are relevant to this device? I scanned to code and found reference to some types but was not able to those listed here and those in the drop down in the IDE.

Specifically, I am wanting to define a child relay as a momentary closed, normally open behaviour. I have a two strand wire that when connected, closes the circuit and the garage door activates. I just need to trigger a momentary close/open action on the relay to signal the garage door opener. One last thing is the time lapse between replay open and close. I’m thinking that those options are shown when the proper type is selected? Thanks again for the help while getting up to speed with all of this. don

Map getRelayTypeParam(num, relay) {
Map options = [0:“Momentary Switch”, 1:“Toggle Switch”, 2:“Toggle Switch (any change) [DEFAULT]”, 3:“Garage Door”, 4:“Water Sensor”, 6:“Motion Sensor”, 7:“Contact Sensor”, 9:“Smoke Detector”, 10:“On/Off Report”]

// These options aren't included because ST doesn't have virtual devices for them.
//[5:"Heat Alarm", 8:"CO Detector"]

return [num: num, name: "Input Type for Relay ${relay}", size: 1, options: options, relay: relay]


It’s actually Zooz. If you have any wiring related questions then you’ll need to contact them, but posting general questions here is fine.

You originally had to change the Type field of the parent device in the IDE because SmartThings assigned it the wrong handler, but that’s the only change you should make in the IDE and you don’t need to mess with the code because all of the settings are shown on the device’s settings screen in the mobile app.

If you have more than 2 child devices or you’re still unable to control them then you’re better off repeatedly removing and adding the device until SmartThings identifies it as the correct device.

Once you’re able to control the relays with the child devices then open the device’s settings in the mobile app and change the “Input Type for Relay” setting to “Garage Door” for the input # you’re using.

The garage door option makes the relay turn on every time the attached momentary switch is pushed and makes it automatically turn off after a couple of seconds.

Those other options create child devices for the inputs so someone could wire a sensor (water/contact/motion/etc) to one of the inputs and use that input’s relay for something unrelated, but that doesn’t apply to you.

Thank you again, Kevin.
The Zen17 is now mostly operating as prescribed. One question remains which is the status of the Zen17 device, not the children. After setting one child relay to garage and activate it manually, I see the device power on, then off in a few seconds as you detailed. The master Zen17 device turns on and off when a child device is switched on/off. Is the the on/off for the master primarily so all child devices can be controlled together?

Lastly, is there documentation on what has been discussed here? I’ve not found details about the many settings like various device types and their actions in what have reviewed thus far. I really hate pestering posts but just not finding answers where I’ve searched.

If either relay is on the parent reports on and the parent allows you to control both relays together.

It looks like Zooz has created some documentation, but I haven’t looked at it so I’m not sure if it includes any of this.


FW 1.1 was released (ZEN17 Universal Relay Change Log - Zooz Support Center) last month which adds the ability to invert the switch inputs. I’ve attempted to update the device handler to add the two new parameters (19 & 20).
This is my first time looking at groovy code, so not sure if something may by awry:

ZEN17 Driver Implementation Suggestions

I’ll be writing an Edge Driver for this device at some point which will support the Switch capability for each Relay Output, but the ability to change the Input Type of each Relay complicates things so I’m looking for suggestions on the best way to implement it.

I plan on adding a setting for each Input Type that will determine the capability used to reflect the relay’s input state, but supporting all 5 of the Input Types and only displaying the ones that are selected in the settings isn’t an option because it would require way too many presentations and profiles.

These are the solutions I’ve come up with and I’m leaning towards option 2, but I’m open to suggestions:

  1. Limit the options for each Input Type to 3 options or only 2 options if “None” needs to be one of them. These are the capabilities supported by the DTH: Switch, Water Sensor, Smoke Alarm, Motion Sensor, and Contact Sensor.

  2. Display a tile for all 5 capabilities for each input, but only change the state of the one chosen for each input in the settings.

Which route did you take?

This is how I’ll be implementing it as long as no one throws a wrench into my plan before I start working on it tonight.

does it require a minimum firmware version for this to work?
after I added my device and verified it was using edge drivers. all categories are showing unable to sync icon except the device network id showing: 2C.

if I’m using a z-wave tilt sensor to detect the open/close status, how do I configure that with zen17?