I thought about that, too, but because the scenes are not visible in ZUI I think it is not successfull.
If I find more information I will open a new topic to not clutter this one.
I thought about that, too, but because the scenes are not visible in ZUI I think it is not successfull.
If I find more information I will open a new topic to not clutter this one.
It looks like two issues, one in ZUI, one in the Z-Wave JS binding.
My findings from today:
I activated MQTT in addition to the WS Server.
I was able to get the Scene Activation CC working in ZUI:
I deleted the Z-Wave JS Thing and rescanned it, but the Scene Activation CC does not appear. → Z-Wave JS problem
I looked into MQTT and found:
{"time":1755440716788,"value":14}
{"time":1755440714130,"value":16}
So it seems to work in MQTT.
In comparison the Thing config from Z-Wave JS:
UID: zwavejs:node:gateway:node37
label: Z-wave js Fibargroup FGD212 (node 37)
thingTypeUID: zwavejs:node
configuration:
configuration-include-consumption-by-device-itself-in-reports: 0
configuration-automatic-control-dimming-step-size: 1
configuration-smoke-co-or-co-2-alarm-response: 3
configuration-swap-functionality-of-key-s-1-and-key-s-2: 0
configuration-force-auto-calibration: 0
configuration-forced-switch-on-brightness: 99
configuration-change-toggle-switch-behavior: 0
configuration-double-click-sets-brightness-to-100: 0
configuration-auto-calibration-status: 1
configuration-active-power-calculation-method: 0
configuration-surge-alarm-report: 1
configuration-manual-control-dimming-step-timing: 5
configuration-perform-auto-calibration: 1
configuration-approximated-power-at-the-maximum-brightness-level: 0
configuration-power-limit: 250
configuration-dimmability-recognized-during-auto-calibration: 0
configuration-timer-functionality-auto-off: 0
id: 37
configuration-general-purpose-alarm-response: 3
configuration-automatic-control-dimming-step-timing: 1
configuration-behavior-after-overcurrent-or-surge: 1
configuration-scene-activation-functionality: 1
configuration-all-on-all-off-function: 0
configuration-manual-control-dimming-step-size: 5
configuration-input-button-switch-configuration: 0
configuration-time-of-alarm-state: 600
configuration-periodic-active-power-and-energy-reports: 3600
configuration-load-error-alarm-report: 1
configuration-power-reports-relative-change-threshold: 10
configuration-incandescence-level-of-dimmable-cfl: 99
configuration-3-way-switch-function: 0
configuration-burnt-out-bulb-detection-time-delay: 5
configuration-minimum-brightness-level: 22
configuration-dimmer-mode-recognized-during-auto-calibration: 1
configuration-dimmer-mode: 2
configuration-maximum-brightness-level: 70
configuration-water-flood-alarm-response: 2
configuration-overcurrent-alarm-report: 1
configuration-state-after-power-failure: 1
configuration-energy-reports-threshold: 10
configuration-overheat-and-voltage-drop-alarm-report: 1
configuration-power-limit-alarm-report: 1
configuration-value-sent-to-associated-devices-on-single-click: 1
configuration-on-off-mode: 2
configuration-temperature-alarm-response: 1
configuration-burnt-out-bulb-detection-power-variation: 30
configuration-soft-start-functionality: 1
configuration-incandescence-time-of-dimmable-cfl: 0
bridgeUID: zwavejs:gateway:gateway
channels:
- id: basic-restore-previous-1
channelTypeUID: zwavejs:7d339fe873626f7bf81314e289c143ff
label: EP1 Restore Previous Value
configuration:
endpoint: 1
writePropertyStr: restorePrevious
commandClassId: 32
commandClassName: Basic
factor: 1
inverted: false
- id: basic-restore-previous-2
channelTypeUID: zwavejs:7d339fe873626f7bf81314e289c143ff
label: EP2 Restore Previous Value
configuration:
endpoint: 2
writePropertyStr: restorePrevious
commandClassId: 32
commandClassName: Basic
factor: 1
inverted: false
- id: basic-value-1
channelTypeUID: zwavejs:a9b7a453105c353c2f5198d63b2aa221
label: EP1 Current Value
configuration:
endpoint: 1
readProperty: currentValue
writePropertyStr: targetValue
commandClassId: 32
commandClassName: Basic
factor: 1
inverted: false
- id: basic-value-2
channelTypeUID: zwavejs:a9b7a453105c353c2f5198d63b2aa221
label: EP2 Current Value
configuration:
endpoint: 2
readProperty: currentValue
writePropertyStr: targetValue
commandClassId: 32
commandClassName: Basic
factor: 1
inverted: false
- id: meter-reset-1
channelTypeUID: zwavejs:c546973fb1a1ddbd38cdf0f5ed9b0a01
label: EP1 Reset Accumulated Values
configuration:
endpoint: 1
writePropertyStr: reset
commandClassId: 50
commandClassName: Meter
factor: 1
inverted: false
- id: meter-value-65537-1
channelTypeUID: zwavejs:8d49c4b0e781ee5cb8b8f2bc8924e61e
label: EP1 Electric Consumption
configuration:
incomingUnit: kWh
endpoint: 1
propertyKeyInt: 65537
readProperty: value
commandClassId: 50
commandClassName: Meter
factor: 1
inverted: false
- id: meter-value-66049-1
channelTypeUID: zwavejs:d9982d7b1d66c1624bb9cf6f47c7ea8c
label: EP1 Electric Consumption
configuration:
incomingUnit: W
endpoint: 1
propertyKeyInt: 66049
readProperty: value
commandClassId: 50
commandClassName: Meter
factor: 1
inverted: false
- id: multilevel-sensor-power-1
channelTypeUID: zwavejs:d9982d7b1d66c1624bb9cf6f47c7ea8c
label: EP1 Power
configuration:
incomingUnit: W
endpoint: 1
readProperty: Power
commandClassId: 49
commandClassName: Multilevel Sensor
factor: 1
inverted: false
- id: multilevel-switch-duration-1
channelTypeUID: zwavejs:ab748d0845f4377be75d7b26c960db96
label: EP1 Remaining Duration
configuration:
endpoint: 1
readProperty: duration
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: multilevel-switch-duration-2
channelTypeUID: zwavejs:ab748d0845f4377be75d7b26c960db96
label: EP2 Remaining Duration
configuration:
endpoint: 2
readProperty: duration
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: multilevel-switch-off-1
channelTypeUID: zwavejs:7d339fe873626f7bf81314e289c143ff
label: EP1 Perform A Level Change (Off)
configuration:
endpoint: 1
writePropertyStr: Off
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: multilevel-switch-off-2
channelTypeUID: zwavejs:7d339fe873626f7bf81314e289c143ff
label: EP2 Perform A Level Change (Off)
configuration:
endpoint: 2
writePropertyStr: Off
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: multilevel-switch-on-1
channelTypeUID: zwavejs:7d339fe873626f7bf81314e289c143ff
label: EP1 Perform A Level Change (On)
configuration:
endpoint: 1
writePropertyStr: On
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: multilevel-switch-on-2
channelTypeUID: zwavejs:7d339fe873626f7bf81314e289c143ff
label: EP2 Perform A Level Change (On)
configuration:
endpoint: 2
writePropertyStr: On
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: multilevel-switch-restore-previous-1
channelTypeUID: zwavejs:7d339fe873626f7bf81314e289c143ff
label: EP1 Restore Previous Value
configuration:
endpoint: 1
writePropertyStr: restorePrevious
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: multilevel-switch-restore-previous-2
channelTypeUID: zwavejs:7d339fe873626f7bf81314e289c143ff
label: EP2 Restore Previous Value
configuration:
endpoint: 2
writePropertyStr: restorePrevious
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: multilevel-switch-value-1
channelTypeUID: zwavejs:f8f6829c90eaa01370120edbb7e9f514
label: EP1 Current Value
configuration:
endpoint: 1
readProperty: currentValue
writePropertyStr: targetValue
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: multilevel-switch-value-2
channelTypeUID: zwavejs:f8f6829c90eaa01370120edbb7e9f514
label: EP2 Current Value
configuration:
endpoint: 2
readProperty: currentValue
writePropertyStr: targetValue
commandClassId: 38
commandClassName: Multilevel Switch
factor: 1
inverted: false
- id: notification-alarm-level-1
channelTypeUID: zwavejs:2ffebecc878ef4f1673efedf55c71a72
label: EP1 Alarm Level
configuration:
endpoint: 1
readProperty: alarmLevel
commandClassId: 113
commandClassName: Notification
factor: 1
inverted: false
- id: notification-alarm-type-1
channelTypeUID: zwavejs:2ffebecc878ef4f1673efedf55c71a72
label: EP1 Alarm Type
configuration:
endpoint: 1
readProperty: alarmType
commandClassId: 113
commandClassName: Notification
factor: 1
inverted: false
- id: notification-heat-alarm-heat-sensor-status-1
channelTypeUID: zwavejs:3c2a1014d58e7a530f6384461d3899e1
label: EP1 Heat Sensor Status
configuration:
propertyKeyStr: Heat sensor status
endpoint: 1
readProperty: Heat Alarm
commandClassId: 113
commandClassName: Notification
factor: 1
inverted: false
- id: notification-power-management-load-error-status-1
channelTypeUID: zwavejs:3c2a1014d58e7a530f6384461d3899e1
label: EP1 Load Error Status
configuration:
propertyKeyStr: Load error status
endpoint: 1
readProperty: Power Management
commandClassId: 113
commandClassName: Notification
factor: 1
inverted: false
- id: notification-power-management-over-current-status-1
channelTypeUID: zwavejs:3c2a1014d58e7a530f6384461d3899e1
label: EP1 Over-Current Status
configuration:
propertyKeyStr: Over-current status
endpoint: 1
readProperty: Power Management
commandClassId: 113
commandClassName: Notification
factor: 1
inverted: false
- id: notification-power-management-over-load-status-1
channelTypeUID: zwavejs:3c2a1014d58e7a530f6384461d3899e1
label: EP1 Over-Load Status
configuration:
propertyKeyStr: Over-load status
endpoint: 1
readProperty: Power Management
commandClassId: 113
commandClassName: Notification
factor: 1
inverted: false
- id: notification-system-hardware-status-1
channelTypeUID: zwavejs:886b46e4a119a6c3210d82f621e066d4
label: EP1 Hardware Status
configuration:
propertyKeyStr: Hardware status
endpoint: 1
readProperty: System
commandClassId: 113
commandClassName: Notification
factor: 1
inverted: false
- id: protection-exclusive-control-node-id
channelTypeUID: zwavejs:b21be530364ce443c0b9e7a5bb7ea9a6
label: Node ID With Exclusive Control
configuration:
endpoint: 0
writePropertyStr: exclusiveControlNodeId
commandClassId: 117
commandClassName: Protection
factor: 1
inverted: false
- id: protection-local
channelTypeUID: zwavejs:3a99c804b54ecf56d5436435ee13b203
label: Local Protection State
configuration:
endpoint: 0
writePropertyStr: local
commandClassId: 117
commandClassName: Protection
factor: 1
inverted: false
- id: protection-rf
channelTypeUID: zwavejs:d760a909cb58310c2dd9ab0b6e0c6b8d
label: RF Protection State
configuration:
endpoint: 0
writePropertyStr: rf
commandClassId: 117
commandClassName: Protection
factor: 1
inverted: false
- id: protection-timeout
channelTypeUID: zwavejs:a89d9cec8ba33b53a30162ea0d13ee80
label: RF Protection Timeout
configuration:
endpoint: 0
writePropertyStr: timeout
commandClassId: 117
commandClassName: Protection
factor: 1
inverted: false
I don’t see any channels that contain the info from the Notification command class.
However, I do see the information here in the ZUI debug log.
2025-08-16 16:04:00.506 CNTRLR [Node 002] [Notification]
type: Access Control
event: Manual unlock operation
2025-08-16 16:04:00.508 INFO Z-WAVE: [Node 002] CC Notification notification {
type: 6,
event: 2,
label: 'Access Control',
eventLabel: 'Manual unlock operation',
parameters: undefined
}
I’m a little confused by the channels that are created by the binding. I finally found the channel to operate the lock (door-lock-mode
). It’s defined as a Number with 0x00 being Unsecured (unlock) and 0xFF being Secured (lock). It would be very nice if there was a Switch channel in addition to this channel.
Can you provide the node json from the store that is logged when the binding connects to the webserver? (Trace level)
I might be able to model it to model it to a switch. Hard part is the mapping value.
Sure, do you want the whole thing, or just that node?
Just the node would do. I can then add it to the store we use for unittests. From there it would be ‘easy’ to develop a stable switch function
Here it is.
node2-lock.json (77.8 KB)
Edit: I scrubbed all the user codes, so it should be good to include in unit tests.
I just posted my issue here.
Then I found this newer thread and it seems discussions about scene activation are already ongoing. I guess this is same/similar to what others have experienced?
Scenes are detected in Zwave JS UI. They are also forwarded to my HomeAssistans instance. But in OH I get nothing when triggering the scenes.
Scenes are currently not supported. It was one of the areas that needs work and didnt make it into oh5
Looked at the json and was about to start, but before i do i want to know what you expect exactly. The channel `door-lock-mode is based on this metadata provided by the ZUI server. It contains 8 possible states. I cannot model 8 states in a single switch.
{
“endpoint”: 0,
“commandClass”: 98,
“commandClassName”: “Door Lock”,
“property”: “currentMode”,
“propertyName”: “currentMode”,
“ccVersion”: 2,
“metadata”: {
“type”: “number”,
“readable”: true,
“writeable”: false,
“label”: “Current lock mode”,
“min”: 0,
“max”: 255,
“states”: {
“0”: “Unsecured”,
“1”: “UnsecuredWithTimeout”,
“16”: “InsideUnsecured”,
“17”: “InsideUnsecuredWithTimeout”,
“32”: “OutsideUnsecured”,
“33”: “OutsideUnsecuredWithTimeout”,
“254”: “Unknown”,
“255”: “Secured”
},
“stateful”: true,
“secret”: false
},
“value”: 255
}
Yes, i understand.
The goal is to be able to operate the lock as a Switch. So, is it possible to create another channel of type Switch, that sends 0x0 (Unsecured) when an OFF command is sent to the item linked to that channel, and sends 0xff (Secured) when an ON command is sent?
I think this might be similar to how you handled RollerShutter?
I want to keep as close to ZUI as possible. The Rollershutter case is a little different as it aggregates three channels into one and does not touch their values.
What would the state be if any of the interim states is set by ZUI? And other devices might have other states/vales, making it nearly impossible to scale.
Maybe a transformation/map is what you are looking for? You can create a switch item that maps the two desired states to on/off
Yeah that may be the best thing to do. I was thinking that it’s a little nasty what i was asking you to do.
Quick look at the OH Zwave looks like the Odd and even are grouped for ON/OFF.
switch (channel.getDataType()) {
case OpenClosedType:
return (eventValue & 0x01) == 0x00 ? OpenClosedType.OPEN : OpenClosedType.CLOSED;
@sihui I’m curious why this didn’t work. I assume you put the file in the config directory… Did ZUI not pick up the file, or was there some other problem. I’m trying to add a device file for a device that’s not in the database, and I can’t seem to get ZUI to recognize the file/device.
I probably had the wrong syntax.
@apella12 provided me a json which works like a charme.
If you need more information, please shout.
Yeah, that’s what I did.
And I’m pretty sure the json is correct because I modeled it off an almost identical device.
I have a snap installation, so I wonder if that’s causing the issue. If it’s looking for a directory named store
, it doesn’t exist in a snap installation e.g. /var/snap/zwave-js-ui/current/config/zen75.json