Z-Wave JS UI and a nanomote quad

Building up a new OH 5.0.1 system. Got an Aeotec Z-Stick 10 Pro. Decided to switch over to the JS UI binding. Got the nanomote quad added but it doesn’t behave nearly as well as it did on my old setup. These events were me clicking on the four buttons sequentially and then going through it a second time. Only on button 4 (the middle one) did it see a button press. All the other presses only triggered the battery state. I do have all four button items linked:

```

2025-10-07 11:12:18.345 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Nanomote_LR_Battery’ changed from 95 % to 94 %
2025-10-07 11:12:20.433 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Nanomote_LR_Battery’ changed from 94 % to 95 %
2025-10-07 11:12:23.076 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Nanomote_LR_Battery’ changed from 95 % to 94 %
2025-10-07 11:12:23.540 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Nanomote_LR_B4’ changed from 1 to 0
2025-10-07 11:12:27.093 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Nanomote_LR_Battery’ changed from 94 % to 95 %
2025-10-07 11:15:01.936 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Nanomote_LR_Battery’ changed from 95 % to 93 %
2025-10-07 11:15:04.660 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Nanomote_LR_Battery’ changed from 93 % to 96 %
2025-10-07 11:15:06.255 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Nanomote_LR_Battery’ changed from 96 % to 94 %
2025-10-07 11:15:08.093 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item ‘Nanomote_LR_Battery’ changed from 94 % to 89 %


Here’s the items I do see in OH, there’s no other items available.

Tried putting this in the original post but the formatting got messed up.

Nanomote_LR_B2 (Type=NumberItem, State=0, Label=Nanomote LR Scene 002, Category=null, Tags=[Measurement])
Nanomote_LR_B3 (Type=NumberItem, State=0, Label=Nanomote LR Scene 003, Category=null, Tags=[Measurement])
Nanomote_LR_B4 (Type=NumberItem, State=0, Label=Nanomote LR Scene 004, Category=null, Tags=[Measurement])
Nanomote_LR_Battery (Type=NumberItem, State=89 %, Label=Nanomote LR Battery Level, Category=null, Tags=[Energy, Measurement])
Nanomote_LR_B1 (Type=NumberItem, State=0, Label=Nanomote LR Scene 001, Category=null, Tags=[Measurement])

I have two nanomote quads connected via Z-wave-js-ui, and they both work as expected. You didn’t share your thing, channel, or link configurations, but I strongly suspect that the issue is somewhere in there.

In the OH Zwave configuration all scene modifying buttons are aggregated into one channel which proves the scene number as the integer and the button action as a decimal. With Zwave-js-ui each of the scene buttons is it’s own channel that just reports the button action. Some user have chosen to reconfigure how they are using the scene buttons and have individual items for each scene. I preferred, instead, to keep my other configurations the same and I have a profile that connects all four scene channels to the same item and formats the item state in the same way as the Z-wave binding.

Getting distracted with real work stuff but I will get back on this in the next day or two. What’s the best to retrieve the details about the thing and items?

I have a second quad that’s still working on my old setup through the standard zwave binding so I can compare that setup if it might reveal any clues. For all I know I could have had both setup to work but not in the best config.

For UI managed things and items, just go to the code tab for each of the configurations and paste the yaml version of the configuration. For channels and links it’s a little harder but you post one demonstration screen shot and the just double check for yourself that the others are all similarly configured.

For text config, just paste those thing config lines and the items (with the channel links).

Honestly it looks like there’s just a small issue where you’ve linked the battery channel to each of the items instead of changing each of the links to the correct channel (cut and paste error?) so just trying to rule that out first before going into anything more technical. The other option is that something went wrong reading the thing config during the initial install of the thing which is where seeing if your thing config matches what’s expected will help.

Nanomote on the new OH setup:

UID: zwavejs:node:wopr3:Nanomote_LR
label: Nanomote LR
thingTypeUID: zwavejs:node
configuration:
  id: 19
  configuration-low-battery-buzzer: 0
  wake-up-wake-up-interval: 0
  configuration-multilevel-command-duration: 255
  configuration-level-of-low-battery: 20
  wake-up-controller-node-id: 1
bridgeUID: zwavejs:gateway:wopr3
location: Living Room
channels:
  - id: central-scene-slow-refresh
    channelTypeUID: zwavejs:c546973fb1a1ddbd38cdf0f5ed9b0a01
    label: Send Held Down Notifications At A Slow Rate
    configuration:
      writePropertyStr: slowRefresh
      endpoint: 0
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false
  - id: central-scene-scene-001
    channelTypeUID: zwavejs:cf1fd28a8c9930fbffd9f3b355d892ea
    label: Scene 001
    configuration:
      propertyKeyStr: "001"
      endpoint: 0
      readProperty: scene
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false
  - id: battery-level
    channelTypeUID: zwavejs:3df7dca5721df41f12c58095d481acf7
    label: Battery Level
    configuration:
      incomingUnit: "%"
      endpoint: 0
      readProperty: level
      commandClassId: 128
      commandClassName: Battery
      factor: 1
      inverted: false
  - id: central-scene-scene-002
    channelTypeUID: zwavejs:cf1fd28a8c9930fbffd9f3b355d892ea
    label: Scene 002
    configuration:
      propertyKeyStr: "002"
      endpoint: 0
      readProperty: scene
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false
  - id: central-scene-scene-003
    channelTypeUID: zwavejs:cf1fd28a8c9930fbffd9f3b355d892ea
    label: Scene 003
    configuration:
      propertyKeyStr: "003"
      endpoint: 0
      readProperty: scene
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false
  - id: central-scene-scene-004
    channelTypeUID: zwavejs:cf1fd28a8c9930fbffd9f3b355d892ea
    label: Scene 004
    configuration:
      propertyKeyStr: "004"
      endpoint: 0
      readProperty: scene
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false

On my older setup that I’m migrating from:

UID: zwave:device:wopr:node40
label: NanoMote P
thingTypeUID: zwave:aeotec_zwa003_00_000
configuration:
  config_32_1: 20
  config_43_1: 0
  group_9: []
  group_8: []
  group_5: []
  group_4: []
  group_7: []
  group_6: []
  wakeup_interval: 0
  group_1:
    - controller
  binding_pollperiod: 10800
  group_3: []
  group_2: []
  wakeup_node: 1
  node_id: 40
bridgeUID: zwave:serial_zstick:wopr
channels:
  - id: switch_dimmer
    channelTypeUID: zwave:switch_dimmer
    label: Dimmer
    description: The brightness channel allows to control the brightness of a light.
      It is also possible to switch the light on and off.
    configuration:
      config_restorelastvalue: true
  - id: scene_number
    channelTypeUID: zwave:scene_number
    label: Scene Number
    description: Triggers when a scene button is pressed
    configuration: {}
  - id: battery-level
    channelTypeUID: system:battery-level
    label: Battery Level
    description: Battery level as a percentage (0-100%)
    configuration: {}

I’ve linked the 4 scene items and the battery level. I can sometimes get an event that the scene changed from NULL to 0, but after that first event for the item they stop showing up. I get the battery state with almost every button press. These four events are me pressing the buttons in sequence 1 through 4, had to press 4 twice before the battery level showed up.

2025-10-09 15:54:09.073 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Nanomote_LR_Battery' changed from 79 % to 75 %
2025-10-09 15:54:12.101 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Nanomote_LR_Battery' changed from 75 % to 78 %
2025-10-09 15:54:15.016 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Nanomote_LR_Battery' changed from 78 % to 80 %
2025-10-09 15:54:22.083 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Nanomote_LR_Battery' changed from 80 % to 72 %

Your thing configuration looks correct. If you are sure that your items are linked to the correct channels then I see only two likely possibilities. 1) The nanomote is not fully configured in Zwave-js-ui or 2) sometimes things don’t update properly when you update a binding if there’s a big change in the way the binding handles the thing?

Have you tried deleting the thing and re-adding it? (As long as you create the thing with the same thing ID you won’t have to change anything else the channels will reconnect correctly.)

Do you see the button endpoints correctly change in the zwave-js-ui interface when clicking? (If not you could try to use the “re-interview node” commend in zwave-js-ui to see if you can get the proper behavior there.)

So I excluded it from the network, and re-included with no security. (I’ve seen more than a few references that security can cause some issues.)

The behavior seems to be pretty much the same. Button presses only trigger an event of “changed from NULL to 0” for the four buttons. Battery seems to come across on most all button presses, but not 100%.

Seems like once the state is set with a button press it never sees any changes.

UID: zwavejs:node:wopr3:Nanomote_LR
label: Nanomote LR
thingTypeUID: zwavejs:node
configuration:
  id: 21
  configuration-low-battery-buzzer: 0
  wake-up-wake-up-interval: 0
  configuration-multilevel-command-duration: 255
  configuration-level-of-low-battery: 20
  wake-up-controller-node-id: 1
bridgeUID: zwavejs:gateway:wopr3
channels:
  - id: central-scene-slow-refresh
    channelTypeUID: zwavejs:c546973fb1a1ddbd38cdf0f5ed9b0a01
    label: Send Held Down Notifications At A Slow Rate
    configuration:
      endpoint: 0
      writePropertyStr: slowRefresh
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false
  - id: central-scene-scene-001
    channelTypeUID: zwavejs:cf1fd28a8c9930fbffd9f3b355d892ea
    label: Scene 001
    configuration:
      propertyKeyStr: "001"
      endpoint: 0
      readProperty: scene
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false
  - id: battery-level
    channelTypeUID: zwavejs:3df7dca5721df41f12c58095d481acf7
    label: Battery Level
    configuration:
      incomingUnit: "%"
      endpoint: 0
      readProperty: level
      commandClassId: 128
      commandClassName: Battery
      factor: 1
      inverted: false
  - id: central-scene-scene-002
    channelTypeUID: zwavejs:cf1fd28a8c9930fbffd9f3b355d892ea
    label: Scene 002
    configuration:
      propertyKeyStr: "002"
      endpoint: 0
      readProperty: scene
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false
  - id: central-scene-scene-003
    channelTypeUID: zwavejs:cf1fd28a8c9930fbffd9f3b355d892ea
    label: Scene 003
    configuration:
      propertyKeyStr: "003"
      endpoint: 0
      readProperty: scene
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false
  - id: central-scene-scene-004
    channelTypeUID: zwavejs:cf1fd28a8c9930fbffd9f3b355d892ea
    label: Scene 004
    configuration:
      propertyKeyStr: "004"
      endpoint: 0
      readProperty: scene
      commandClassId: 91
      commandClassName: Central Scene
      factor: 1
      inverted: false

Is that in OH or in Z-wave-js-ui?

That’s watching event.log in OH.

What about in zwjsui?

Scenes work differently in zwave-js than in the OH ZW binding. Generally the topic is null and momentarily changes but returns to null. I don’t have this device, but one press can mean 0, press and hold 1, double press 2, etc. Also not using zwave-js binding at this moment but using zwave-js via generic Mqtt things I need to use String items. Don’t know if that is the case with the zwave-js OH binding. I had trouble with Number items because of the null. For instance, if you press once and get 0 with a number item, OH rejects the null update, so the item stays a 0. If you have a rule that uses “changed to” it will not be triggered. As @JustinG suggested look at the ZUI Central Scene Section while pressing the button.

Edit: Just freshed my memory. I reset the string to ““

when
	Item Key_Fob_Scene_Two_Text changed to "0"
then
// Do stuff
	Key_Fob_Scene_Two_Text.postUpdate("")
end

I use number items, and also did when I had zwjsui connected via MQTT. But, the way I aggregate the multiple different scene channels into something akin to the old zwave single scene channel probably masks any misbehavior, so I don’t know if string items would make this more reliable. (And my scene button rules have always used update instead of changed, again going back to the original Zwave binding.)

1 Like

I seem to have it working now, but I’m not seeing anything in events.log about the buttons being pressed.

Unless you have changed the logging, item updates (with no change in state) are filtered out of the event logs. I think that is what this means in the log4j2.xml

		<Logger level="ERROR" name="openhab.event.ItemStateEvent"/>
		<Logger level="ERROR" name="openhab.event.ItemStateUpdatedEvent"/>
		<Logger level="ERROR" name="openhab.event.GroupStateUpdatedEvent"/>

If your rule uses received update, everything should be okay

Single clicks on the nanomote are working. I figure hold and release can similarly work if I need to set that sequence as a trigger.

I dug back into this and figured out I have to set the state for each button to 99 (or anything not 0, 1 or 2) at the end of any rule. This seems to insure that any subsequent button presses will always show up and be usable as a trigger.