[ANNOUNCEMENT] : node-red-contrib-zwave-js V7

@marcus-j-davies Thanks for all the work on bringing this over. I'm having much more success in migrating all my Zwave control to NodeRed vs. previous OpenZwave attempts!!!

I started my migration this week with your v6 and then updated yesterday to the newer v7 version. In v6 I was able to set locations for my nodes, but in v7 I'm getting this error "Node #10 does not support the command NameSet! (ZW0302)" Not a huge issue but wanted to flag it.

The bigger issue I'm having is with my Eaton Scene Controller (Z-Wave JS Config DB Browser). I'm suspecting the issues are in ZWave JS and not your implementation but thought I'd run them by you:

  1. While I can associate multiple Nodes through the UI, the scene controller switches won't work if there is more than 1 node associated.

  2. I haven't been able to figure out anyway to pickup in the Node output of which switch was pushed on the scene controller (I created a hack to get around #1 & #2 for my multi-switch scenes by pushing out a distinct value for Switches #4 and #5 and doing all the control in Node-Red but obviously if my system is off line the scene controller won't be able to utilize that logic).

  3. Similarly I haven't been able to find any documentation on how to turn a physical controller scene switch on or off from the Zwave node

All of these have worked in other Zwave control software I've used in the past (OpenHab and HomeSeer) so I know there are command classes that support the functionality.

Any thoughts or guidance to some resources to investigate more would be appreciated.

HI @rgerrans

but in v7 I'm getting this error "Node #10 does not support the command NameSet! (ZW0302)" Not a huge issue but wanted to flag it.

That's really strange. see, the node name and location, is first set in the context of ZWave JS its self - meaning the values are something that the Driver holds, weather or not the Node supports it.

If however, the node does support it, the values are also written to the node it self.

image

The error you received, means the check passed, so it attempted to write it to the node, but then the driver states the node does not support it - odd, maybe try doing a fresh interview?

shift + click on the node, then choose the handshake icon (interview) you will need to wake the device for the interview to begin (causing an event is not waking it :wink: ) - there should be a wake up routine, at least for battery operated devices - but then it may always be 'listening' i.e a FLiRS device or mains powered.

The name should be set however - but won't be applied to the node its self, i.e moving it to another system, won't keep its name.

I take it the node was fully interviewed (thumbs up) before you named it? - part of the interview is checking what is/isn't supported on said node.

  1. While I can associate multiple Nodes through the UI, the scene controller switches won't work if there is more than 1 node associated.

If the associations are being saved/applied, it means the device has accepted them, if the device is no longer sending anything when more than 1 node is associated , this sound like a node config param not being present in our database, or the device has a quirk we are not aware of - this will need logging with the zwave-js repo - a debug leve log (file) will be needed.

If you can find a manual for it - and cross check the config params in the node, with what is stated in the manual, if there are some we don't have. - its likely that

you can still set these params - using the CCAPI - let me know if you want to go that route.

  1. I haven't been able to figure out anyway to pickup in the Node output of which switch was pushed on the scene controller (I created a hack to get around #1 & #2 for my multi-switch scenes by pushing out a distinct value for Switches #4 and #5 and doing all the control in Node-Red but obviously if my system is off line the scene controller won't be able to utilize that logic).

The entire payload should contain everything about the event - if you can provide it, I may be able to identify it

  1. Similarly I haven't been able to find any documentation on how to turn a physical controller scene switch on or off from the Zwave node

If you can send me the payload you get when set at the device, I can extraportale the command to set it remotely (hopefully :sweat_smile: )

Tried reinterviewing the node. It reset the Node name to the device and gave me the same interview when I tried to rename it / set the location (It does accept the new name in the UI even with the error but leaves the location blank
image

I had found it at one point and will go look for it later.

Here you go. I added the comments of the action applied at the Scene controller. The 4 and 5 values are what I'm using to identify them in Node-Red.

##Switch #4 On
{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655310096396,"object":{"commandClassName":"Basic","commandClass":32,"endpoint":0,"property":"currentValue","newValue":4,"prevValue":0,"propertyName":"currentValue","normalizedObject":{"commandClass":"32 - Basic","type":"number","newValue":4,"prevValue":0,"label":"Current value"}}},"_msgid":"ab1aa2e75aa27789"}

##Switch #4 Off
{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655310100708,"object":{"commandClassName":"Basic","commandClass":32,"endpoint":0,"property":"currentValue","newValue":0,"prevValue":4,"propertyName":"currentValue","normalizedObject":{"commandClass":"32 - Basic","type":"number","newValue":0,"prevValue":4,"label":"Current value"}}},"_msgid":"866acbf263865b7e"}

{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655310100717,"object":{"commandClassName":"Basic","commandClass":32,"endpoint":0,"property":"currentValue","newValue":0,"prevValue":0,"propertyName":"currentValue","normalizedObject":{"commandClass":"32 - Basic","type":"number","newValue":0,"prevValue":0,"label":"Current value"}}},"_msgid":"bc0c9a6ddeae4a8a"}

##Switch #5 On
{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655310102637,"object":{"commandClassName":"Basic","commandClass":32,"endpoint":0,"property":"currentValue","newValue":5,"prevValue":0,"propertyName":"currentValue","normalizedObject":{"commandClass":"32 - Basic","type":"number","newValue":5,"prevValue":0,"label":"Current value"}}},"_msgid":"146cdb5c84ca48bf"}

##Switch #5 Off
{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655310105887,"object":{"commandClassName":"Basic","commandClass":32,"endpoint":0,"property":"currentValue","newValue":0,"prevValue":5,"propertyName":"currentValue","normalizedObject":{"commandClass":"32 - Basic","type":"number","newValue":0,"prevValue":5,"label":"Current value"}}},"_msgid":"87995d1b2363e1e2"}

{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655310105931,"object":{"commandClassName":"Basic","commandClass":32,"endpoint":0,"property":"currentValue","newValue":0,"prevValue":0,"propertyName":"currentValue","normalizedObject":{"commandClass":"32 - Basic","type":"number","newValue":0,"prevValue":0,"label":"Current value"}}},"_msgid":"b864db670bdf4946"}

What on earth is going on with the encoding :sweat_smile:
is this how it has copied? - that does not look normal - and nothing that I have ever seen

Thank goodness for the wayback machine since all the old links were 404. Here is the technical bulletin
advancedtechinfo_V2.pdf (302.8 KB)

Here is the general manual for the scene controller
rfwcddsc_rev.a.pdf|attachment (165.9 KB)

Also, here is a general discussion I used when I got it working on OpenHab

And the steps I was able to do in ZenSys Tools to configure it outside OpenHab

Those are the 6 Message objects I captured/copied from Node-Red from the Device Node for the actions I commented

Ok can you try something for me?

Jumping in a meeting in a couple of minutes but can either before then or later today

Try this (send it to the scene controller)
This is what you do in your comments on the forums posted

{payload:{
  "mode": "CCAPI",
  "cc": "Scene Controller Configuration",
  "method": "set",
  "node": 46, /* Your Node ID - can be omitted if sending to device node */
  "params": [4, 4] // Group ID, Scene ID
}}

You can do this on the CMD Factory also, if you so wish, ensure, all associations groups are pointed at the Controller node (1)

in theory (and I recommend this way - to keep things in sync) it can also be done in the UI, providing the device is telling us it supports the Scene config class - it will be under Scene Controller Configuration

This device seems to be talked about in various forums

Lastley, I have been asked if you can raise a bug report about node naming (and it being marked as supported, when its not)

Note: I have no idea, what is up with that encoding - I have never seen it, have you used an odd character maybe when setting it :man_shrugging:

Sweet!!! Now we are getting the Scene ID's to show up. [edit] I did it by injecting a message into the node. I'll try it through the UI later

Here are the messages for an on/off cycle:


{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_NOTIFICATION","timestamp":1655316517760,"object":{"commandClassName":"Scene Activation","commandClass":43,"endpoint":0,"property":"sceneId","value":4,"propertyName":"sceneId","normalizedObject":{"commandClass":"43 - Scene Activation","type":"number","value":4,"label":"Scene ID"}}},"_msgid":"46e62e5e72e65412"}

{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655316517762,"object":{"commandClassName":"Scene Activation","commandClass":43,"endpoint":0,"property":"dimmingDuration","newValue":"default","propertyName":"dimmingDuration","normalizedObject":{"commandClass":"43 - Scene Activation","type":"object","newValue":"default","label":"Dimming duration"}}},"_msgid":"fdcb9a3647997284"}

{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_NOTIFICATION","timestamp":1655316517780,"object":{"commandClassName":"Scene Activation","commandClass":43,"endpoint":0,"property":"sceneId","value":4,"propertyName":"sceneId","normalizedObject":{"commandClass":"43 - Scene Activation","type":"number","value":4,"label":"Scene ID"}}},"_msgid":"d4d47d1c02c0dbda"}

{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655316517781,"object":{"commandClassName":"Scene Activation","commandClass":43,"endpoint":0,"property":"dimmingDuration","newValue":"default","prevValue":"default","propertyName":"dimmingDuration","normalizedObject":{"commandClass":"43 - Scene Activation","type":"object","newValue":"default","prevValue":"default","label":"Dimming duration"}}},"_msgid":"01bffec695d93ed8"}

{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655316519769,"object":{"commandClassName":"Basic","commandClass":32,"endpoint":0,"property":"currentValue","newValue":0,"prevValue":0,"propertyName":"currentValue","normalizedObject":{"commandClass":"32 - Basic","type":"number","newValue":0,"prevValue":0,"label":"Current value"}}},"_msgid":"dfc22e5eb283ce48"}

{"payload":{"networkId":1,"node":9,"nodeName":"Scene Contrl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","nodeLocation":"Scene Contrl\u0000\u0000","event":"VALUE_UPDATED","timestamp":1655316519786,"object":{"commandClassName":"Basic","commandClass":32,"endpoint":0,"property":"currentValue","newValue":0,"prevValue":0,"propertyName":"currentValue","normalizedObject":{"commandClass":"32 - Basic","type":"number","newValue":0,"prevValue":0,"label":"Current value"}}},"_msgid":"119a1280d7eca2c2"}

I tried adding multiple associated devices to the Group associated with that scene and that's still not working, though I realized I misstated what happens:

  • The Scene switch will turn off all devices
  • The Scene switch will only turn on the last device in the list added
  • If I set the Group value to 255 it only cycles the light on the scene switch (on and immediately back off), but if I set it to any value <100 it will turn on / turn off on push. (except for Group #1 which has to be set to 255 to work.....

Will put that on my "to do" list

I thought you were referring to the messaging encoding, vs. the name characters. I've used this device on so many different control software setups that probably one of them injected those non-renderable characters into it

Confirmed that you can configure through the UI as well. For both approaches I did have to remove / read the Controller association to the group

Later, I'll play with turning the scene switch lights on/off since I saw that command class at one point.

Confirmed that you can configure through the UI as well.

The UI uses the ValueAPI (which is superior to the CCAPI)
CCAPI bypasses any caching system, whereas ValueAPI works with it.

This is likely why the UI didn't have them - as we used the CCAPI

ValueAPI = :+1:

The UI will help you understand the ValueAPI command.

  1. Open up the UI's built in debug window
  2. Change something in the UI
  3. You now have the ValueAPI Command for you to abuse :+1:

I tried adding multiple associated devices to the Group associated with that scene and that's still not working, though I realised I misstated what happens:

I don't actually know why that is happening. device Associations quite literally bypasses any software/controller/middleware

In the Associations UI, providing the Group has the target nodes, the device should be sending to them.
can you screenshot one of the Association Groups?

I have a ZWave Sniffer here, so can usually see (or eavesdrop) things like this occurring - all appears to act how I would expect - do you have a sniffer by any chance?

if the device (under the Associations UI is showing your target nodes) the device is resposbile for sending them a message directly.

I don't own a Scene controller, so maybe a little off the mark.

Here is my test run earlier today. It pushed the response to the Controller (Node 1) and pushed an off ("0") message to all the devices in the Association Group but only pushed my on value ("99") to Node 14.

The fact it is pushing "off" to all the devices seems to indicate that the association is working, not sure why the "on" value is only going to the Controller and last device in the list? If I remember right, in other systems I could actually configure the value for each node in a Scene group so wonder if that's what is going on (that could explain why a standard "off" is getting pushed out to everything but an "on" value is only getting associated to the last Node in the group?

[CORRECTION] For Group #4 it is not pushing to the Controller, only to the last node in the list

More for you to noodle on.

If I set a value through the UI for the "Group 4 Level" it clears the scene / group link and goes back to where I was earlier.

If I then set the Group 4 to Scene 4, I loose the association.

If I then readd the Association, I get the Scene 4 messages but the level value gets changed to "default" and I have no Scene 4 identification in the "Off" messages.

So I'm back to my "hack" of setting the "Group 4 Level" value to the trigger number to make my flows run.....

Right, I have been reading over the manuals you sent, over and over...., and I have come to realise something: this device, is extremely awkward to configure (Sorry) :grimacing: but then again - I don't use scene controllers, so may be normal :man_shrugging:

I have a theory, that this device sets levels for the nodes that were last associated.

From the manual

Configuration_Set, Parameter Number (1, 2, 3, 4, or 5 for Button 1 - 5), Configuration Value 1 (this value, 0x00, 0x01 - 0x63, or 0xFF, is the level value for all the nodes listed in the previous Association_Set command)

Repeat sending association/configuration sets as required for nodes of different level values

What can we take from this?
The device is sensitive to the order things are being set.

The UI isn't actually going to help here sadly, as the associations are applied individually.

So... Lets start again. - I will continue in my next comment.

Lets use Group 1 as are test....

During this test, only have the controller in its lifeline group (255) - no where else, groups 1-5 should only have your target nodes, controller should only be on 255.

I guess what I am asking for here, is to have no associations set. Only the controller on its 255 lifeline.

Ensure all Groups and Scene IDs have been configured, using my comments here.

The device, should be sending scene changes to its lifeline group.

So....

1 - Remove all associated nodes from Association Group 1 (should be done already :wink: )

2 - Add a group of nodes (that need to use the same level) to Association Group 1 (Exhibit A)

Exhibit A

// Scene Controler node ID is 8
// Group 1
// Associated Nodes 25,50
let Message = {
    payload: {
        mode: "AssociationsAPI",
        method: "addAssociations",
        params: [{nodeId:8},1,[{nodeId:25},{nodeId:50}]]
    }
}
return Message

3 - Set the level for Group 1 (you can do this in the UI)
At this point the value you set, will be applied to 25,50

4 - Add further nodes to the group (that needs to use a different level) (Exhibit B)

Exhibit B

// Scene Controler node ID is 8
// Group 1
// Associated Nodes 75,100
// This wont remove nodes 25, 50 (75, 100 will be appended )
let Message = {
    payload: {
        mode: "AssociationsAPI",
        method: "addAssociations",
        params: [{nodeId:8},1,[{nodeId:75},{nodeId:100}]]
    }
}
return Message

5 - Set the level for Group 1 (you can do this in the UI)
At this point the value you set, will be applied to 75,100 (not 25,50)

The above steps, are in line with what the manual is asking us to do.

if this works, I may need to add the ability to set associations up in batch, this way this ordered routine, can be done entirely from the UI.

I have never needed to do this or come across the need to do so, but the manual states otherwise.

reference to the associations API (and my wiki in general)

lets see what this does. :crossed_fingers:

Bonus.

if each of your target nodes, all use different levels, then you can still use the UI
(providing Associations and level value sets are still completed after each other)

its just when you have target nodes that need to use the same level, where you need to use the message approach (currently)

It took me a ton of research to figure out how to get it to work with OpenHab, so not surprised. Was actually thinking about trying that approach to setting everything.

Thanks for all the research on this. I'm heading out of town early this morning so won't be able to test until this weekend or early next week.

BTW, do you have a Venmo or other means for contributing to your beer fund as an extra thanks for all the hard work on this in general and especially this scene controller challenge?

1 Like

BTW, do you have a Venmo or other means for contributing to your beer fund as an extra thanks for all the hard work on this in general and especially this scene controller challenge?

I occasionally get asked about sponsorship, but currently I am choosing not to at this time.
A like on the GitHub project is just as appreciative for me :+1:

1 Like