I just tried a light group vs a scene with the same light entities, and the results were the same. The service calls to turn on the lights are execute sequentially, and wait until the command is finished in the driver. I notice one difference with the scene is that it won’t make a service call if the state of the entity is already at the desired state. Also, with my three lights, setting the brightness and getting a response was basically instantaneous. It’s possible the covers might take longer, that all depends how the driver signals completion, I believe it’s usually after the command was accepted by the controller.
In summary, I could see a scene being better if some of the devices are already in their desired state; that would cut down on the number of service calls and Z-Wave commands. Otherwise, a group and scene seem to be the same to me. And finally, compared to zwavejs2mqtt, HA entity services will wait for the command to finish and they are executed serially. This time may be variable depending on the targeted devices. zwavejs2mqtt issues all set commands w/o waiting.
If you’re interested to see what’s going on for yourself, add these logging settings to your configuration.yaml
:
logger:
default: info
logs:
homeassistant.components.zwave_js: debug
zwave_js_server: debug
You’ll see the websocket command being issued as they are sent, and the responses being received in the home-assistant.log file or stdout. Here’s a setValue command corresponding to turning on a light:
2022-05-09 13:59:12 DEBUG (MainThread) [zwave_js_server] Publishing message:
{'command': 'node.set_value',
'messageId': 'fc34605f7be84c0c88db83407f4611fc',
'nodeId': 43,
'options': {'transitionDuration': 'default'},
'value': 46,
'valueId': {'ccVersion': 4,
'commandClass': 38,
'commandClassName': 'Multilevel Switch',
'endpoint': 0,
'metadata': {'label': 'Target value',
'max': 99,
'min': 0,
'readable': True,
'type': 'number',
'valueChangeOptions': ['transitionDuration'],
'writeable': True},
'property': 'targetValue',
'propertyName': 'targetValue',
'value': 0}}
Here’s the response to that command:
2022-05-09 13:59:12 DEBUG (MainThread) [zwave_js_server] Received message:
WSMessage(type=<WSMsgType.TEXT: 1>, data='{"type":"result","success":true,"messageId":"fc34605f7be84c0c88db83407f4611fc","result":{"success":true}}', extra='')
In this case, I believe the response is sent after the driver verifies that the command was accepted by the controller, it doesn’t include any timing verifying that the value was correct.
The resolution of the logs is only 1 second, so you can’t get any perf measurements better than that, but it sounds like from your case that isn’t a problem, I imagine it’s in the seconds.
Are your cover devices one of these? https://products.z-wavealliance.org/Search/Index?regionId=-1&searchText=graber
Or, if you look at the Debug info tab of one of the nodes, does it say "isFrequentListening": true
?