Zooz Central Scene VS generic driver (UI?) weirdness on older Zooz Plus switches

I have a few older Zen 23 V2 Z-Wave+ toggle switches and have recently started to have trouble with the drivers.

I stopped using "Zooz Central Scene" drivers because they would not report "physical" vs "digital". Instead I have been using the "Generic Z-Wave Smart Switch" drivers which did report the type properly.

Somewhere around around 5/30 this stopped working. Also I now have to hit the "refresh" button on the device page to get the switch to report.

If I change the driver to "Generic Z-Wave Switch" (and hit configure) it works as expected but does not report the proper switch type ("physical"/"digital").

Note: I also tried "Generic Z-Wave Plus Switch" and "Generic Z-Wave Plus Scene Switch" as well... same behavior as the Smart Switch driver - "refresh" forces the report otherwise nothing, events don't show up etc.

What is going on? Am I missing something? The switch is most definitely Z-Wave Plus and sadly cannot upgrade the firmware on those V2 devices.

Try these drivers for ZEN23.

Thanks but no - still getting the "refresh" bug and interestingly like the system scene drivers when I digitally toggle off it reports as "physical"... I guess it kinda makes sense since @bcopeland wrote those (but maybe not the system ones dunno).

This is odd.. can you turn on debugging and try again and see if there is a command being missed by the driver?

Is this the built-in or community?

Doing this now!

System driver - note I also tried your old driver as well.

edit: the most recent entries were your old driver... will redo using system drivers..

Here's what I just did:

  • changed back to system drivers "Zooz Central Scene Switch"
  • Hit "configure", set debug on, and hit "Refresh"..
  • Then turned switch on then off via the device page. It actually responded without a refresh..
  • Went upstairs and physically toggled the switch on/off

here are the results:

Yea.. those are not maintained anymore.. I was hoping someone would take over my old community drivers..

1 Like

The Zooz advanced ones seem to be working really well - I am using them for my V3 &4 switches and dimmers.

Nothing showed up in the log for this?

Huh.. that's interesting, I thought it was the top entries... but that's what I am showing in the logs. Doing it again...

Yeah am getting nothing? Just physically toggled twice... light went on and off twice as expected...

I opened a new tab for all logs and toggled a different switch (V4) to make sure logs were reporting to the UI - they are.

For giggles hit "refresh" but nothing extra showed up in the logs other than the refresh()..,

Uh, now none a bunch of my Zooz switches seem to be reporting physical events only digital ones.. even the V3's & 4's? My enbrighten fan switches are working as expected..

Something is afoot at the Circle K apparently - should I do a soft-reset?

Note: a Zooz bathroom light switch seems to be reporting physical events (System Zooz Central Scene Switch) but my kitchen dimmer is not - using community advanced zooz drivers.

So for my kitchen dimmer I switched to the System Central Scene dimmer.. did the configure/debug thing and physical is now reporting... note: this is a V4 dimmer not the V2 switch I have upstairs.

You can try my advanced driver on the older switches, you will just possibly get the "Pending Changes" message because it cannot sync up all the parameters. Otherwise it should work. I do have a parameter test which is supposed to hide any not working parameters as well to get rid of the pending message but I don't have any old devices to thoroughly test it.

@bcopeland, I will have to go in and see what of your old community drivers don't have other good options and should be revived. I will take you up on that offer to continue them when I get some time to do so.

1 Like

Add this driver and run the command and give me the log output:

metadata {
    definition(name: "Association Group Validator", namespace: "hubitat", author: "Bryan Copeland") {
        command "checkAssociations"
    }
}
import groovy.transform.Field

@Field static CMD_CLASS_VERSIONS = [0x6C:1, 0x85:2]

void checkAssociations() {
    sendToDevice(new hubitat.zwave.commands.associationv2.AssociationGroupingsGet().format())
}

void zwaveEvent(hubitat.zwave.commands.associationv2.AssociationGroupingsReport cmd) {
    List<String> cmds = []
    for (int grp in 1..cmd.supportedGroupings.toInteger()) {
        cmds.add(new hubitat.zwave.commands.associationv2.AssociationGet(groupingIdentifier: grp.shortValue()).format())
    }
    sendToDevice(cmds)
}

void zwaveEvent(hubitat.zwave.commands.associationv2.AssociationReport cmd) {
    log.debug "Association Group ${cmd.groupingIdentifier} nodes: ${cmd.nodeId}"
}

void zwaveEvent(hubitat.zwave.Command cmd) {
    log.debug "skip:${cmd}"
}

void zwaveEvent(hubitat.zwave.commands.securityv1.SecurityMessageEncapsulation cmd) {
    hubitat.zwave.Command encapsulatedCommand = cmd.encapsulatedCommand(CMD_CLASS_VERS)
    if (encapsulatedCommand) {
        zwaveEvent(encapsulatedCommand)
    }
}

void zwaveEvent(hubitat.zwave.commands.supervisionv1.SupervisionGet cmd) {
    hubitat.zwave.Command encapsulatedCommand = cmd.encapsulatedCommand(CMD_CLASS_VERS)
    if (encapsulatedCommand) {
        zwaveEvent(encapsulatedCommand)
    }
    sendToDevice(zwave.supervisionV1.supervisionReport(sessionID: cmd.sessionID, reserved: 0, moreStatusUpdates: false, status: 0xFF, duration: 0).format())
}

void parse(String description) {
    if (logEnable) log.debug "parse:${description}"
    hubitat.zwave.Command cmd = zwave.parse(description, CMD_CLASS_VERS)
    if (cmd) {
        zwaveEvent(cmd)
    }
}

void sendToDevice(List<String> cmds, Long delay=300) {
    sendHubCommand(new hubitat.device.HubMultiAction(commands(cmds, delay), hubitat.device.Protocol.ZWAVE))
}

void sendToDevice(String cmd, Long delay=300) {
    sendHubCommand(new hubitat.device.HubAction(zwaveSecureEncap(cmd), hubitat.device.Protocol.ZWAVE))
}

List<String> commands(List<String> cmds, Long delay=300) {
    return delayBetween(cmds.collect{ zwaveSecureEncap(it) }, delay)
}

Great..