I’ve created a device type for the Leviton Vizia VRCS4 Scene Controller. Because of the way the scene commands work, I essentially turned it into a 4 button remote, 3 if there is a built in relay.

Setting it up is a bit of work:

Note: buttons are numbered 1-4 and dim, with dim at the bottom.

To associate, press and hold buttons 1 and 3 on the VRCS4 for 5 seconds, the LEDs will start to flash amber. Hold the SmartThings Hub near to the device tell the SmartThings app to connect a new device. Note: you tell the device to connect before the hub. The hub should find a ZWave Remote. This will eventually be your scene controller.

If you have a load connected to the VRCS4 (hardwired):
Go back to the SmartThings app dashboard. Press and hold buttons 2 and 4 on the VRCS4 for 5 seconds. The led on Button 1 will start to flash amber. Now tell SmartThings to connect a new device. It will find a ZWave switch. Smartthings will not be able to control this switch yet.

To get SmartThings to control the load, you need to go into the api, and reassign it from ZWave Switch to my VRCS2 Button device type (The device type is available here: https://github.com/bdahlem/device-type.VRCS22).

To use the scene control buttons, you need to go into the api and reassign it from a ZWave remote to my Z-Wave Scene Controller device type. (The device type is available on github at: GitHub - bdahlem/device-type.Z-Wave-Scene-Controller: Smart Things Device Type for VRCS scene controller) Now when you press the buttons, the remote should report which button was pressed. You may need to open up the device tile and press the configure button.

Having button numbers show up on the tile are great, but you probably want to be able to make the buttons do something. For that, you need to install a SmartApp to respond to the button presses. (I have one here: GitHub - bdahlem/smartApp-VRCS-Button-Controller: Smart Things SmartApp for reacting to VRCS Button Presses) This app allows you to associate the built in relay with the first button, and decide what you want the other buttons to do.

I wouldn’t suggest this be the first device you try to connect; there are a lot of parts to get to work together. But it works well and is responsive for me in my setup, across two hubs and controlling several devices with each button.


I have a dead switch in my front hallway (I think it used to control an outdoor lamp post that was long since gone what I bought the house). This would work great here… but I’m trying to think of a practical use for it and I don’t have one right now. :frowning: At $165ish… I think I need to have a good reason for it vs. just a desire to have more geek! :smile:

Oh, also… what does the Dim button do? I mean obviously it dims something, but is it just the built in relay or can you assign it for something else?

Thank you so much for this! It is working well for me.

I’ve been waiting so long to be able to use my 4-button switches. You rock!

Right now the dim button doesn’t do anything. Relays can’t dim, they are just on/off. Instead, it sends start/stop dimming up/down commands to the SmartThings hub which would then need to pass them along. There’s some weirdness there thought. The commands won’t be repeated by other devices so your controller and hub need to be one radio hop from each other. Other than that, I have to figure out how those commands work with other devices. So it’ll be a bit before I can implement them.

The VRCS4-M0Z costs less than the MRZ because it doesn’t have the relay inside of it. If you don’t need to directly control a load from the switch, it brings the cost down a bunch.

1 Like

I’m glad it works for you. I was really worried about trying to describe setting this up to people.

Okay, well I thought it was working anyway. The first button is definitely working, but the other three are not. When I review the logs to see what is happening, it looks like it is only seeing the release command for the other three buttons, and not the actual push. Interestingly, it also thinks the first button is “Button 11”.

I’m going to troubleshoot in the logs some more once I get back in town, but in the meantime atleast I can use the first button. :smile:

1 Like

Hi Brian!

Thanks for contributing this to the SmartThings community!

I just installed a Leviton VRCS4-M0Z and tried using your device type and app, but unfortunately it’s not working for me yet. I’ve started to try to debug it but I’m not sure what’s going on yet and was hoping you might have some idea.

I had no problem getting it to connect to my hub - it was recognized as a Z-Wave Remote, and I changed it to a Z-Wave Scene Controller. I’m definitely seeing logs from it, but for some reason no matter what I press, all it detects is a button release.

I tried making only one change to the code - since I don’t have an associated load, I commented out the special case for button 1, since I noticed it was doing a associationGet call on only that button, and I wanted to try to simplify it and understand the logs better. Here are the logs from when I press Configure, then press two of the buttons:


10:20:48 PM: debug Parsing 'zw device: 10, command: 7205, payload: 00 1D 08 02 02 61 ’
10:20:48 PM: debug 4 buttons stored
10:20:48 PM: debug Parsing 'zw device: 10, command: 8506, payload: 04 ’
10:20:47 PM: debug Sending configuration: [7204, delay 100, 8505, delay 100, 85010101, 85010201, 85010301, 85010401]

All four lights are green. When I press #1, #1 blinks off, then on, then all four go off, then all on, and I get these logs:

10:21:44 PM: debug buttonEvent ‘0’
10:21:44 PM: debug zwaveEvent button release
10:21:44 PM: debug Parsing 'zw device: 10, command: 2C02, payload: 00 ’
10:21:41 PM: debug Parsing 'zw device: 10, command: 2001, payload: 00 ’
10:21:41 PM: debug Parsing 'zw device: 10, command: 2001, payload: 00 ’
10:21:41 PM: debug Parsing 'zw device: 10, command: 2001, payload: 00 ’
10:21:40 PM: debug Parsing 'zw device: 10, command: 2001, payload: 00 ’

If I press #2, the same thing happens - #2 blinks off, then on, then all four go off, then all on, and I get these logs:

10:23:07 PM: debug buttonEvent ‘0’
10:23:07 PM: debug zwaveEvent button release
10:23:07 PM: debug Parsing 'zw device: 10, command: 2C02, payload: 00 ’
10:23:04 PM: debug Parsing 'zw device: 10, command: 2001, payload: 00 ’
10:23:04 PM: debug Parsing 'zw device: 10, command: 2001, payload: 00 ’
10:23:03 PM: debug Parsing 'zw device: 10, command: 2001, payload: 00 ’
10:23:03 PM: debug Parsing 'zw device: 10, command: 2001, payload: 00 ’

Just to be safe, I tried resetting it (buttons 1 and 3 held down for 10+ seconds), then connected it again, and I’m getting the same results.

By the way, did you find any specs for this device and its Z-wave support, or did you write this code more by comparison with similar devices and trial and error? If there are any specs I’d love to peruse them.

Thanks in advance!

Hi Dominic,

I hoped the M0Z would work the same as the MRZ, hopefully it’s just some small thing I’ve overlooked.

I don’t have access to my device right now, but let me see if I can make sense of your logs. The first command 7205 is a manufacturer specific command from the M0Z, I don’t know how to parse that. The 8506 says that there are 4 scene associations available, 4 buttons. The device type responds to this with 8505 commands to associate the hub with each scene so it will receive scene activate commands from the M0Z.

The four lights being on is weird. They should all be off. When you press a button, it should blink on then off. I think this might be why you aren’t seeing any button press commands. The Scene controller only sends scene activate commands when a scene is supposed to be turned on. That is why I had to turn them back off immediately in the code. Come to think of it, you might try to add:
zwave.sceneActuatorConfV1.sceneActuatorConfReport(dimmingDuration: 255, level: 255, sceneId: 0)
to the list of commands in the configurationCmds function… That would set scene 0, which should be all off, and may get you into a known state.

As for specs for the device, no I couldn’t find anything. What I have been using are the Smartthings z-wave documentation and this list of z-wave command classes

Hi Brian,

Thanks for the response!

I made some progress - I tried sceneControllerConfGet and discovered that each groupId wasn’t assigned a sceneId, so I added this at initialization time:

    zwave.sceneControllerConfV1.sceneControllerConfSet(groupId:1, sceneId:1).format(),
    zwave.sceneControllerConfV1.sceneControllerConfSet(groupId:2, sceneId:2).format(),
    zwave.sceneControllerConfV1.sceneControllerConfSet(groupId:3, sceneId:3).format(),
    zwave.sceneControllerConfV1.sceneControllerConfSet(groupId:4, sceneId:4).format()

This didn’t fix the initial state (all lights were on), but once I toggled each one, everything started working then! Let me try sceneActuatorConfReport and see if that will get it into the correct initial state. I’ll try that tonight and let you know. I’d love it if I could reset the device, connect it, and have it configured correctly automatically.

What does the word “report” mean in sceneActuatorConfReport? I thought it meant to just ask the device to send back a report, not to actually change something - but then again, that’s what “get” does.

Reports are usually status updates sent by a device in response to a Set or Get. The MRZ shows that scenes are active when all the devices associated with that scene (group I guess) are still reported to be in that scene. Since the hub is associated with every scene, telling the MRZ the hub has switched to scene zero tells it that the four scenes are no longer active, which makes the buttons turn off and lets us get button presses again.

I may have manually set the group and scene configuration like you did at one point, though I know I’ve reset my MRZ since then… this is a strange protocol when you are only seeing bits and pieces of documentation for it.

Was there any progress with the VRCZ4-M0Z? I have two of them and while I can pair them as remotes, I haven’t figured out how to program the buttons. Thanks

@bdahlem Thanks for the code! Finally got this working after some z-wave issues. I have this going with 2 VRCS4-M0Z and it’s working well.

You’ve done some excellent work here. Am I missing something or did your VRCS22 device type disappear from github? I get a broken link at https://github.com/bdahlem/device-type.VRCS22

There’s a typo in the link. It should be https://github.com/bdahlem/device-type.VRCS2


I got everything working on my VRCS4-M0Z except the first button doesn’t register, did anyone run into this problem?

I think the problem might be that the state for the first button light is always on. Is there any code that I can use to turn off this led state?

Did you ever get the Zone Controllers working? I’m in the same situation.

I’ve gotten two of the three codes from Brian’s github links to create smartdevices within the api/ide, but I can’t seem to get the VRCS button controller code to work.

When I try to create the new smartdevice from code, I get the following error:

Groovy.lang.MissingMethodException: No signature of method: script14221072087741312117638.page() is applicable for argument types: (java.util.LinkedHashMap) values: [[name:selectButton]] Possible solutions: path(java.lang.Object), wait(), any(), wait(long), main(java.lang.String), main(java.util.List)

I’m an absolute novice here - I’ve checked to make certain I didn’t leave text out or modify during the copy from the github code. Is there another revised code for the VRCS button controller that doesn’t have this issue, or is there something I’m overlooking that is clear to a non-novice user?

Thanks for your help on this.

You may have already, but try using the raw button in github and copy/paste from there. Sometimes when you copy from the regular window, you lose small parts of the code or get html scripting in addition.

Thanks Scott - I did use the raw button, but just tried again - same result.

What makes me think it may not be user error is that I was successful in getting the other two pieces of code from github to add - the only one I can’t get to add is: