Wake Up class and Z-Wave Plus devices?


(www.rboyapps.com - Make your home your butler!) #1

I’m looking for a few pointers here, most of my work has been based on experimentation. I can’t find any Z-Wave Plus Security class enabled sample devices.

AFAIK Z-Wave Plus devices mandate the use of the Security Class. Which mean all the commands needs to be encrypted and processed accordingly.

I have a sample of many devices from the same manufacturer, one which is Z-Wave and other which is Z-Wave Plus.
On the Z-Wave devices (since all the devices I had support WAKE_UP_V2), the following commands work like a charm:

    zwave.wakeUpV2.wakeUpIntervalCapabilitiesGet().format()
    zwave.wakeUpV2.wakeUpIntervalGet().format()

However on the Z-Wave Plus devices I get no response from the device. I’ve also tried using V1 version of these commands with no success.

Since Z-Wave Plus devices use the Security class, I decided to encapsulate these commands (like all other commands for Plus devices) using the following:

    def cmd = []
    cmd << zwave.wakeUpV2.wakeUpIntervalCapabilitiesGet()
    cmd << zwave.wakeUpV2.wakeUpIntervalGet()
   delayBetween(cmd.collect{ secure(it) }, 1200)

and secure() is defined as:

private secure(physicalgraph.zwave.Command cmd) {
zwave.securityV1.securityMessageEncapsulation().encapsulate(cmd).format()

}

While the above approach works for ALL other commands, for the WAKE_UP class (both V1 and V2) I get the following error:

307f7ee5-f9aa-4f3d-bcf0-352a7dd5f90b 10:12:49 AM: error groovy.lang.MissingMethodException: No signature of method: static physicalgraph.zwave.ZwaveUtils.uint24FromBytes() is applicable for argument types: (java.util.ArrayList$SubList, java.lang.Integer) values: [[0, 14, 16, 1], 0]
Possible solutions: uint24FromBytes(java.util.ArrayList, int) @ line 226

307f7ee5-f9aa-4f3d-bcf0-352a7dd5f90b 10:12:48 AM: error groovy.lang.MissingMethodException: No signature of method: static physicalgraph.zwave.ZwaveUtils.uint24FromBytes() is applicable for argument types: (java.util.ArrayList$SubList, java.lang.Integer) values: [[0, 2, 88, 9, 58, 128, 0, 14, 16, 0, 2, …], …]
Possible solutions: uint24FromBytes(java.util.ArrayList, int) @ line 226

I’m looking for some pointers here, is there an incompatibility with the WAKE_UP class and security encapsulation? How does one use the Wake Up class for Z-Wave Plus (security) devices?

@Tyler @Jim any advise/help would be appreciated


#2

Because I rely on text to speech, I can’t read any of the code, so I can’t comment on that.

I can say, however, that there is nothing in the zwave plus standard that requires security encapsulation.

You didn’t specify the brand and model of the devices that you’re working with, which would’ve helped a lot since we could’ve looked at the conformance statements, but by chance are they from Aeon labs? Aeotec made the very strange decision to make all of their Z wave plus devices optionally use security, even the lightbulb. All it’s really done is make pairing those devices much more difficult.

Other manufacturers did not do the same thing. For example, zwave plus homeseer switches do not support any of the security command sets.

So I don’t know exactly what you’re seeing, but there’s no zwave plus requirement that all devices support encapsulation.


(www.rboyapps.com - Make your home your butler!) #3

ZooZ, Monoprice and other ones I can’t divulge yet due to a NDA. I’m communicating with the manufacturers but seems all their devices require the use of secure messages for the plus devices.

If anyone has a sample working code of Querying a Plus device that requires secure encapsulation using the WAKE UP class, it would be very helpful. I can’t seem to get it to work in any of my tests.


#4

I don’t know if there’s a security option requirement for Z wave plus sensors. Maybe. But definitely not all zwave plus devices. And even with the sensors, the person still has the choice to join it securely or not.

As far as sample devices is there code for the Aeotec ZW074-A sensor?

Otherwise, I would look at the DTH that @Robert_Vandervoort did for the newest Aeotec sensor. There were a lot of issues with configuring that one, he worked closely with Aeotec, and his DTH has been reported as working very well by many forum members.

You can find it in the community – created code for that as well as other zwave plus sensors by searching the quick browse list for motion sensor DTHs in the community created wiki.

http://thingsthataresmart.wiki/index.php?title=How_to_Quick_Browse_the_Community-Created_SmartApps_Forum_Section


(www.rboyapps.com - Make your home your butler!) #5

Yes I’ve seen it, also seen the reference code he wrote for the ZooZ device, very nicely done @Robert_Vandervoort - you’ve actually done this one the right way. But you don’t use WAKE UP CapabilitiesGet, did you try using it in your tests?


(George) #7

Doesn’t use CapabilitiesGet, but this one works for NoMoreInformation:

and can also confirm that
cmds << secure(zwave.wakeUpV2.wakeUpIntervalSet(seconds: 288000, nodeid:zwaveHubNodeId))

worked for me a week ago when needed to set the interval


(www.rboyapps.com - Make your home your butler!) #8

I’m interested in CapabilitiesGet and IntervalGet, the two functions that
are returning an error when trying to encapsulate.


(George) #9

Apparently this has been an issue for a while:

@duncan any news on this?


(www.rboyapps.com - Make your home your butler!) #10

Yes @duncan any update please, I had sent you a PM on this earlier last week


#11

Tagging @jody.albritton


(Michael Barry) #12

I’m still waiting too:-) @tyler @duncan


(Robert Vandervoort) #13

I had a prototype that I was working on that would pull it but j never got it to work. There are several command classes not well supported in ST and we may have to wait a bit before they catch up.


(Don Caruana) #14

Did anyone ever hear back on this? Seems like it’s still an unresolved issue or did I miss it?

Sorry to bug you all, but I figured I’d try my first “tagging”. :slight_smile:

@duncan @jabbera @RBoy @Robert_Vandervoort @JDRoberts


(Duncan) #15

Sorry for the slow response, but the MissingMethodException should be fixed in the next deploy (Thursday).


(Don Caruana) #16

@duncan - I didn’t see a new firmware announcement or hint at one, other than a 17.x beta. Has it just not been announced yet or when do you think we might actually be able to use this?


(Duncan) #17

It’s not a firmware change. It will be in the next platform update. There were some problems with it, so it wasn’t able to be deployed on Thursday.


(Don Caruana) #18

Just as a general aside, it’s possible to code around this while we wait for the platform updates. The issue is when the parse routine tries to pass it off to the regular method where it bombs. Not sure how you handled it @RBoy, but I just made my own secure wakeupinterval reporting routine and intercepted the command in the parse method. When it sees a secure wakeup (the wakeup notification is not secure from what I’ve seen) it sends it to my routine instead of the built in one.

So far works perfect.


(Duncan) #19

This was fixed in yesterday’s deploy.


(Don Caruana) #20

@duncan - did it get unfixed today then? Just tested and got the following for wakeupintervalget and wakeupintervalcapabilitiesget, respectively.

groovy.lang.MissingMethodException: No signature of method: static physicalgraph.zwave.ZwaveUtils.uint24FromBytes() is applicable for argument types: (java.util.ArrayList$SubList, java.lang.Integer) values: [[0, 56, 64, 1], 0]
Possible solutions: uint24FromBytes(java.util.ArrayList, int) @ line 330

groovy.lang.MissingMethodException: No signature of method: static physicalgraph.zwave.ZwaveUtils.uint24FromBytes() is applicable for argument types: (java.util.ArrayList$SubList, java.lang.Integer) values: [[0, 0, 240, 255, 255, 255, 0, 0, 0, 0, 0, …], …]
Possible solutions: uint24FromBytes(java.util.ArrayList, int) @ line 330


(Duncan) #21

Hm, I’m not getting that exception anymore. This is when calling zwave.parse on a command: 8406 (WakeUpIntervalReport) correct? Can you share the full description string of that command that is giving you the exception?