ZwaveJS - Polling older devices - what's the best way?

Since I had issues with my zwave and the reason for that was me wanting to poll 8 equal devices to see the status in ZwaveJS after controlling the covers locally.

I had a node-red flow every 60 seconds doing a zwave_js.refresh_value for 8 cover devices helping me in getting the actual status in zwave. The devices are old devices. Replacing them for more recents models would mean 8*60 euro.

What would be the best way to have them reporting back status / polling them without stressing zwavejs too much? Keep 8 different node-red flows to poll every device one by on with interval of 5 secs or…?


Setup polling in zwavejs2mqtt:

Select your device type you want to poll, and what value to poll (it will poll each one with a single entry so you don’t need multiple entries):

and make sure to hit save:

Forgot to mention, I have no zwavjs2mqtt. Isn’t this method also putting extra load on the network? Or not?

I’ve posted a reply to your referenced thread.

Getting back to the device status not updating and polling, I believe on the other thread you said it was a Shade Controller, specifically this one:

It is an older device that appears to not report any status or send basic reports, or have any configuration parameters, so I believe polling is the only way you can get a status. I had one older GE switch that was like this, and replaced it with a newer model. Since they are expensive as pointed out, that doesn’t appear a good option, at least in the short run. Its possible over time you can replace them individually at least to get more up to date zwave specifications, which would include status.

I suggested the new thread for the polling because I know you had a lot of other things going on with your issues on the other thread, and figured the question specifically around polling could get “lost”. Thanks to firstof9’s response about polling in zwavejs2mqtt. I knew it was capable of doing it but didn’t really know how to set it up. I would think using the zwave software itself, instead of Home Assistant as another app, would be the best way to go for polling. My question on that though, for anyone who might know, if you are polling 8 devices, does zwavejs2mqtt space that out so they don’t all happen at once? The original issue appeared to be a zwave network overwhelmed with traffic by having 8 devices refresh all at the same time, every minute.

Short of installing zwavejs2mqtt, since you mentioned node red, I would think just doing a separate inject node for each of all 8 devices, and spacing out the the intervals (ie first one is every 60 seconds, 2nd is every 90 seconds, 3rd 120 seconds, etc) should space out your polling so it isn’t all happening at once. Every minute is probably too often, unless you have an automation relying on their status, but if the polling is spaced it shouldn’t create a traffic jam. Here’s how I would do it probably in node red:

refresh poll

[{"id":"a38b05c0c6092048","type":"inject","z":"65d4f7b6aa8e19da","name":"Poll 1","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"300","crontab":"","once":true,"onceDelay":"60","topic":"","payloadType":"date","x":170,"y":100,"wires":[["935b0ee046bdd6f1"]]},{"id":"8fe08fe615b0fa0d","type":"inject","z":"65d4f7b6aa8e19da","name":"Poll 2","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"300","crontab":"","once":true,"onceDelay":"90","topic":"","payloadType":"date","x":170,"y":160,"wires":[["d18fd720777a8a9a"]]},{"id":"e6c37b8159a78730","type":"inject","z":"65d4f7b6aa8e19da","name":"Poll 3","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"300","crontab":"","once":true,"onceDelay":"120","topic":"","payloadType":"date","x":170,"y":220,"wires":[["db09201a8614f214"]]},{"id":"935b0ee046bdd6f1","type":"api-call-service","z":"65d4f7b6aa8e19da","name":"Refresh 1","server":"","version":3,"debugenabled":false,"service_domain":"zwave_js","service":"refresh_value","entityId":"switch.living_room_lamp","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":340,"y":100,"wires":[[]]},{"id":"d18fd720777a8a9a","type":"api-call-service","z":"65d4f7b6aa8e19da","name":"Refresh 2","server":"","version":3,"debugenabled":false,"service_domain":"zwave_js","service":"refresh_value","entityId":"switch.living_room_lamp","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":340,"y":160,"wires":[[]]},{"id":"db09201a8614f214","type":"api-call-service","z":"65d4f7b6aa8e19da","name":"Refresh 3","server":"","version":3,"debugenabled":false,"service_domain":"zwave_js","service":"refresh_value","entityId":"switch.living_room_lamp","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":340,"y":220,"wires":[[]]}]

Exactly how i did it :slight_smile:

I will split it up with intervals like you confirmed on my suggestion and monitor…

Yes, that’s the case… depending on the status of the cover lights should go on/off inside outside…

EDIT: If you have 3 of them “inject nodes” how do you make sure when (re(starting) node-red they will not all start at the same time? delay node :slight_smile:

In the inject node at the bottom there is a check box to delay when it first triggers. Just stagger the amount of seconds by 30 seconds or so for each (30, 90, 120, etc), see the example flow I pasted. You’llhave to play around with the values to get a balance that still triggers timely for your automations while not creating zwave errors due to traffic.

1 Like

Thanks for the confirmation!