VISION - ZL7431US - Single Relay Module Switch - Wiring Diagram and Other Useful Information

I have been searching for a simple and tiny relay switch to use with Smartthings. I believe I have found it. I have been testing the device and created a Wiring Diagram that is more useful than the one supplied by Vision. This product was intended to be used behind non-smart wall switches to allow you to make a dumb-switch smart. This works in Smartthings without a custom device handler as a simple switch.

If you change the device type in the IDE to say a Z-Wave Virtual Momentary Contact Switch then its applications open up tremendously. Also the RELAY on the Vision ZL7431US is isolated unlike the Fibaro switches I have tried. To me having the isolated relay makes this much more useful for other projects. Also because it is much more tiny than say the Linear FS20Z (also an isolated relay) I can hide/stuff the Vision ZL7431US into tighter places.

I have found that if you create a custom Device Handler to mimic the built in Z-Wave Virtual Momentary Contact Switch you then have control via code to change the momentary delay. By default the built in Z-Wave Virtual Momentary Contact Switch has a delay of 2 seconds. I have personally changed this via a custom DH to 1 second (again more useful for things like a garage door, coffee maker with momentary switch, etc.)

I am sharing the Wiring Diagram I created here. Feel free to use it or modify it to help design your own projects. I am also sharing 3 links to where you can purchase your own Vision ZL7431US. I would like to see more people using it so it won’t be discontinued. They are very inexpensive compared to other solutions.



Here is the custom DH code. It is named the same in Smartthings with MOD at the end. Delay is set to 1000 (1 minute)

 *  Copyright 2015 SmartThings
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 *  in compliance with the License. You may obtain a copy of the License at:
 *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
 *  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
 *  for the specific language governing permissions and limitations under the License.
 *  SmartSense Virtual Momentary Contact Switch
 *  Author: SmartThings - Modified by J.G. 12/23/2017
 *  Date: 2013-03-07
metadata {
	definition (name: "Z-Wave Virtual Momentary Contact Switch MOD", namespace: "smartthings", author: "SmartThings") {
		capability "Actuator"
		capability "Switch"
		capability "Refresh"
		capability "Momentary"
		capability "Sensor"
		capability "Relay Switch"

	// simulator metadata
	simulator {
		status "on":  "command: 2003, payload: FF"
		status "off": "command: 2003, payload: 00"

		// reply messages
		reply "2001FF,2502,delay 1000,200100,2502": "command: 2503, payload: FF"
		reply "200100,2502": "command: 2503, payload: 00"

	// tile definitions
	tiles {
		standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) {
			state "off", label: '${name}', action: "momentary.push", icon: "", backgroundColor: "#ffffff"
			state "on", label: '${name}', action: "", icon: "st.switches.switch.on", backgroundColor: "#79b821"
		standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") {
			state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"

		main "switch"

def parse(String description) {
	def result = null
	def cmd = zwave.parse(description, [0x20: 1])
	if (cmd) {
		result = createEvent(zwaveEvent(cmd))
	log.debug "Parse returned ${result?.descriptionText}"
	return result

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) {
	[name: "switch", value: cmd.value ? "on" : "off", type: "physical"]

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
	[name: "switch", value: cmd.value ? "on" : "off", type: "digital"]

def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) {
	if (state.manufacturer != cmd.manufacturerName) {
		updateDataValue("manufacturer", cmd.manufacturerName)

	final relays = [
	    [manufacturerId:0x0113, productTypeId: 0x5246, productId: 0x3133, productName: "Evolve LFM-20"],
		[manufacturerId:0x5254, productTypeId: 0x8000, productId: 0x0002, productName: "Remotec ZFM-80"]

	def productName  = null
	for (it in relays) {
		if (it.manufacturerId == cmd.manufacturerId && it.productTypeId == cmd.productTypeId && it.productId == cmd.productId) {
			productName = it.productName

	if (productName) {
		log.debug "Relay found: $productName"
		updateDataValue("productName", productName)
	[name: "manufacturer", value: cmd.manufacturerName]

def zwaveEvent(physicalgraph.zwave.Command cmd) {
	// Handles all Z-Wave commands we aren't interested in

def push() {
	def cmds = [
		zwave.basicV1.basicSet(value: 0xFF).format(),
		"delay 1000",
		zwave.basicV1.basicSet(value: 0x00).format(),

def on() {

def off() {
		zwave.basicV1.basicSet(value: 0x00).format(),

def refresh() {

For the Vision ZL7431US, How would you connect it to s 120V outlet? This is outside with intention to control a Pool Gas Heater on/off switch, which is 24VAC

I’ve been trying (unsuccessfully) to set this up without a physical switch. Is this possible, or have I been wasting my time?

I’ve got the relay to power up and sync, but beyond that, I can’t get it to do anything at all.

Any advise on how to wire this to turn lights on and off without a physical switch?

Just wire it as per this drawing and don’t connect the trigger green wire to the switch.

I installed this below, directly replacing the two wires of the manual Switch. Paid electrician $100 for connect to local fuse.
Very important:
Make sure you install inside a plastic junction case as metal will block the z-wave signal:

Junction box:
AWclub 4"x4"x 2.8"(100x100x70mm) Dustproof IP65 Junction Box Universal Electric Project Enclosure

I tried this configuration, but still nothing. I got tired of it (its been a few weeks already), so I just replaced the entire thing with a ZWave switch. I don’t need one, but I guess I don’t need to use it :slight_smile:

My guess is the relay was DOA for whatever reason. Too bad it took me 3 weeks to realize it I’m returning it on Monday.

Thanks for the help!!

That’s not necessarily true. Metal boxes could cause issues with signal transmission, but all my switch/fixture boxes are metal and I haven’t really had any issues.

Hey all, Im not an electrician but an electrician told me to just wire the black and blue wires to the switch that has the line black wire hooked to it and the red and green to the load side of the switch that has the black wire from the light hooked to it and then connect the white wire to the other two white wires. This is a single pole light switch operating a single light in my closet. It pairs with smartthings and I can hear the relay click when I turn it on but the lights don’t come on. I put a voltmeter on the red and green wires coming out of the relay and there is no voltage there. Any ideas. Could this switch be bad?