ZWave device unknown - not sure how to proceed

Hi,
not 100% sure how to proceed with a new unknown ZWave device with my OH 4.3.2 installation.

I found hints in the forum about following this link, but it’s not available: https://www.cd-jackson.com/index.php/zwave/zwave-device-database/zwave-device-list

I also found hints to update the ZWave device xml file, but I don’t know how to do (it looks like it’s inside a jar-file?!)

After doing an OH scan in ZWave device, it found the device but it’s unknown and there is a hint “… The device is not in the database…In either case, the database must be updated and you should raise an issue to get this addressed.…”.

I’d like to raise such an issue with this post:

The box is labeled: Qolsys, IQ Smart plug, QZ2101-840, ZWave plus

OH showing these details:

    zwave_class_basic:     BASIC_TYPE_ROUTING_SLAVE
    zwave_frequent:        false
    zwave_listening:       true
    zwave_version:         3.96
    zwave_plus_roletype:   ROLE_TYPE_SLAVE_ALWAYS_ON
    zwave_nodeid:          75
    zwave_plus_devicetype: NODE_TYPE_ZWAVEPLUS_NODE
    zwave_beaming:         true
    zwave_class_specific:  SPECIFIC_TYPE_POWER_SWITCH_BINARY
    zwave_class_generic:   GENERIC_TYPE_SWITCH_BINARY
    zwave_secure:          false
    zwave_neighbours:
    zwave_manufacturer:    298
    zwave_devicetype:      5
    zwave_deviceid:        3
    zwave_routing:         true

The created label showed the following in brackets: (012A:0005:0003:3.96)
looks like it’s the manfuacturer in hex, the device type, the device id and the zwave version.

No Channels are listed.

I don’t see it in the ZW DB. Review the blog on opensmarthouse and this post for your next steps. Guidance for “unknown” Zwave Device - Tutorials & Examples / Solutions - openHAB Community

Mhh, I try to read and understand all this, but… I’m still a bit lost.

The opensmarthouse blog says I first need to create an account to access the ZWave database. But the link to create an account is broken (file not found).

The forum instruction says I should “The first task is to get the modified XML to your local machine.

Would I get this xml file in case I would have been able to create an account (which is not working) on opensparthouse?

I’ve found a xml file qz2140-840_0_0.xml (is this part of the ZWave database xml ?) at github for the manufacturer Qolsys, but it’s 3 years old and does only contain data for a different device.

When one is talking about the ZWave XML device database, is there one central xml file which contains all the ZWave devices, or does any device brings it’s own xml device file (like the one I’ve already found for this other Qolsys device)?

Update:
I found some more information about this device. Unfortunately, it’s also not listed in the https://devices.zwave-js.io/ database. It’s still an active product. It’s available since January 2019. It has an FCC ID and is the US version of the ZWave frequency (908.42MHz). I’ve bought 2 of them via ebay US.

  1. Try the link in this post. Opensmarthouse Database Registration Down - Off-Topic - openHAB Community
  2. The device you found is the only Qolsys in the ZW DB, not applicable to you.
  3. There are two different XMLs
    a) The one that you need to update the ZW DB once you have write access is on your machine in userdata/zwave or var/lib/openhab/zwave folder.
    b) After the ZW DB is updated you can download the XML (using the gear thingy) that gets added to the ZWave jar and add to your current .jar per the link instructions to get going right away. Or you can wait until the binding is updated, but at this point it will be a 5.0 snapshot and require 64 bit OS and Java 21

Does that help?

Thanks a lot!

  1. This special registration link you’ve provided worked and now I’m registered.

  2. Yes, the device is not in the ZW DB.

  3. a) I found the XML file in my ./userdata/zwave/ folder. The file name contains an address and the current assigned ZWave nodeId (network_d49b73d5__node_75.xml).

  4. b) It looks like I first need to create a ticket to get access rights to create a new device. Just done this, now I have to wait.

1 Like

Just an additional question regarding point 3. a) and b)

Will the final required XML (3b) be automatically generated form the ZW DB (engine) just on the data provided in the XML file which I’ve provided in step 3a and which was generated by OH while scanning for new ZWave devices?

If yes, is it possible to manually create this final required XML file manually by myself out of the data from the XML file from OH (from 3a)?

I take the question is because no response to write access? Sometimes @chris gets busy.

Edit: It can be done but is tricky and then needs to be manually added to your existing jar. I would use the only other Qolsys device in the binding as a template. Do you have the manual and the OH generated XML?

I can imagine that he’s a busy guy. He already gave me write access and in the meantime I’ve filed the request as an issue.

I found no manual/specification/documentation for this new device regarding the ZWave parameters. But I have the OH thing generated XML file on hand (the one which I’ve also attached to the filed issue as 3a).

I’ve tried to dig a bit deeper inside, but it seems to be complicated for a ZWave novice.

I’m already using some ZWave smart plugs which looks nearly the same, but from a different manufacturer (these ones are not longer available).

Already used smart plug NAS-WR01ZE: zwave:shenzhen_coolcampwrplug_00_000

New Qolsys smart plug: 012A:0005:0003:3.96

Both have switching, power and energy consumption features. If I look to the things/code data for the existing device I can see it’s configuration and channel details:

UID: zwave:shenzhen_coolcampwrplug_00_000:myzwave:tpati_light_patio_cactus_poweroutlet
label: "Light Patio Cactus PowerOutlet: node54 (NAS-WR01ZE Wall Plug Switch)"
thingTypeUID: zwave:shenzhen_coolcampwrplug_00_000
configuration:
  config_11_1: 0
  config_10_1: 1
  wakeup_interval: 0
  group_1:
    - controller
  group_3: []
  group_2: []
  config_1_1: 1
  switchall_mode: 0
  config_2_1: 1
  wakeup_node: 0
  config_7_2: 300
  config_8_1: 0
  config_9_2: 150
  config_3_1: 13
  config_4_1: 12
  node_id: 54
  config_5_2: 120
  config_6_1: 5
bridgeUID: zwave:serial_zstick:myzwave
location: patio
channels:
  - id: switch_binary
    channelTypeUID: zwave:switch_binary
    label: Switch
    description: Switch the power on and off
    configuration: {}
  - id: meter_kwh
    channelTypeUID: zwave:meter_kwh
    label: Electric meter (kWh)
    description: Indicates the energy consumption (kWh)
    configuration: {}
  - id: meter_watts
    channelTypeUID: zwave:meter_watts
    label: Electric meter (watts)
    description: Indicates the instantaneous power consumption
    configuration: {}
  - id: meter_current
    channelTypeUID: zwave:meter_current
    label: Electric meter (amps)
    description: Indicates the instantaneous current consumption
    configuration: {}
  - id: meter_voltage
    channelTypeUID: zwave:meter_voltage
    label: Electric meter (volts)
    description: Indicates the instantaneous voltage
    configuration: {}
  - id: meter_reset
    channelTypeUID: zwave:meter_reset
    label: Clear Accumulated Energy
    description: Reset the meter
    configuration: {}
  - id: alarm_power
    channelTypeUID: zwave:alarm_power
    label: Alarm (power)
    description: Indicates if a power alarm is triggered
    configuration: {}

The Qolsys device which was discovered by OH but still unknown looks like this - looks like an empty blueprint for unknown devices:

UID: zwave:device:myzwave:node75
label: Z-Wave Node 075 (012A:0005:0003:3.96)
thingTypeUID: zwave:device
configuration:
  switchall_mode: 0
  group_1:
    - controller
  group_3: []
  node_id: 75
  group_2: []
bridgeUID: zwave:serial_zstick:myzwave

I think I need to “transfer” the information from the OH generated XML file (3a) to something similar looking data (but in XML format which I don’t know) like the existing and working device. But for all these config parameters I don’t find anything useful in the OH generated XML file (3a).

Here is the generated OH XML file:

<node>
<homeId>0xd49b73d5</homeId>
<nodeId>75</nodeId>
<version>4</version>
<manufacturer>0x12a</manufacturer>
<deviceId>0x3</deviceId>
<deviceType>0x5</deviceType>
<listening>true</listening>
<frequentlyListening>false</frequentlyListening>
<routing>true</routing>
<security>false</security>
<beaming>true</beaming>
<maxBaudRate>40000</maxBaudRate>
<sleepDelay>500</sleepDelay>
<nodeInformationFrame>
<commandClass>COMMAND_CLASS_ZWAVEPLUS_INFO</commandClass>
<commandClass>COMMAND_CLASS_MANUFACTURER_SPECIFIC</commandClass>
<commandClass>COMMAND_CLASS_VERSION</commandClass>
<commandClass>COMMAND_CLASS_ASSOCIATION</commandClass>
<commandClass>COMMAND_CLASS_ASSOCIATION_GRP_INFO</commandClass>
<commandClass>COMMAND_CLASS_DEVICE_RESET_LOCALLY</commandClass>
<commandClass>COMMAND_CLASS_POWERLEVEL</commandClass>
<commandClass>COMMAND_CLASS_CONFIGURATION</commandClass>
<commandClass>COMMAND_CLASS_SWITCH_BINARY</commandClass>
<commandClass>COMMAND_CLASS_SWITCH_ALL</commandClass>
<commandClass>COMMAND_CLASS_ALARM</commandClass>
<commandClass>COMMAND_CLASS_METER</commandClass>
<commandClass>COMMAND_CLASS_BASIC</commandClass>
</nodeInformationFrame>
<associationGroups class="concurrent-hash-map">
<entry>
<int>1</int>
<associationGroup>
<index>1</index>
<maxNodes>0</maxNodes>
<name>Lifeline</name>
<profile1>0x0</profile1>
<profile2>0x1</profile2>
<commands>
<commandClass>COMMAND_CLASS_SWITCH_BINARY</commandClass>
<commandClass>COMMAND_CLASS_METER</commandClass>
<commandClass>COMMAND_CLASS_DEVICE_RESET_LOCALLY</commandClass>
<commandClass>COMMAND_CLASS_ALARM</commandClass>
</commands>
<associations>
<associationMember>
<node>1</node>
</associationMember>
</associations>
</associationGroup>
</entry>
<entry>
<int>2</int>
<associationGroup>
<index>2</index>
<maxNodes>0</maxNodes>
<name>Basic Set Rep.</name>
<profile1>0x71</profile1>
<profile2>0x8</profile2>
<commands>
<commandClass>COMMAND_CLASS_BASIC</commandClass>
</commands>
<associations/>
</associationGroup>
</entry>
<entry>
<int>3</int>
<associationGroup>
<index>3</index>
<maxNodes>0</maxNodes>
<name>Power Alarm Rep.</name>
<profile1>0x71</profile1>
<profile2>0x8</profile2>
<commands>
<commandClass>COMMAND_CLASS_ALARM</commandClass>
</commands>
<associations/>
</associationGroup>
</entry>
</associationGroups>
<endpoints class="concurrent-hash-map">
<entry>
<int>0</int>
<endPoint>
<deviceClass>
<basicDeviceClass>BASIC_TYPE_ROUTING_SLAVE</basicDeviceClass>
<genericDeviceClass>GENERIC_TYPE_SWITCH_BINARY</genericDeviceClass>
<specificDeviceClass>SPECIFIC_TYPE_POWER_SWITCH_BINARY</specificDeviceClass>
</deviceClass>
<endpointId>0</endpointId>
<secureCommandClasses/>
<supportedCommandClasses class="concurrent-hash-map">
<entry>
<commandClass>COMMAND_CLASS_NO_OPERATION</commandClass>
<COMMAND__CLASS__NO__OPERATION>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>1</versionSupported>
</COMMAND__CLASS__NO__OPERATION>
</entry>
<entry>
<commandClass>COMMAND_CLASS_BASIC</commandClass>
<COMMAND__CLASS__BASIC>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>1</versionSupported>
<isGetSupported>true</isGetSupported>
</COMMAND__CLASS__BASIC>
</entry>
<entry>
<commandClass>COMMAND_CLASS_SWITCH_BINARY</commandClass>
<COMMAND__CLASS__SWITCH__BINARY>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>1</versionSupported>
<isGetSupported>true</isGetSupported>
</COMMAND__CLASS__SWITCH__BINARY>
</entry>
<entry>
<commandClass>COMMAND_CLASS_SWITCH_ALL</commandClass>
<COMMAND__CLASS__SWITCH__ALL>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>1</versionSupported>
<isGetSupported>true</isGetSupported>
<mode>SWITCH_ALL_EXCLUDED</mode>
</COMMAND__CLASS__SWITCH__ALL>
</entry>
<entry>
<commandClass>COMMAND_CLASS_METER</commandClass>
<COMMAND__CLASS__METER>
<version>3</version>
<instances>1</instances>
<control>false</control>
<versionSupported>4</versionSupported>
<meterType>ELECTRIC</meterType>
<meterScales>
<meterScale>E_KWh</meterScale>
<meterScale>E_W</meterScale>
<meterScale>E_V</meterScale>
<meterScale>E_A</meterScale>
</meterScales>
<canReset>true</canReset>
<isGetSupported>true</isGetSupported>
<isSupportRequestSupported>true</isSupportRequestSupported>
</COMMAND__CLASS__METER>
</entry>
<entry>
<commandClass>COMMAND_CLASS_ASSOCIATION_GRP_INFO</commandClass>
<COMMAND__CLASS__ASSOCIATION__GRP__INFO>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>1</versionSupported>
<autoSubscribeGroups>
<int>1</int>
<int>3</int>
</autoSubscribeGroups>
</COMMAND__CLASS__ASSOCIATION__GRP__INFO>
</entry>
<entry>
<commandClass>COMMAND_CLASS_DEVICE_RESET_LOCALLY</commandClass>
<COMMAND__CLASS__DEVICE__RESET__LOCALLY>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>1</versionSupported>
</COMMAND__CLASS__DEVICE__RESET__LOCALLY>
</entry>
<entry>
<commandClass>COMMAND_CLASS_ZWAVEPLUS_INFO</commandClass>
<COMMAND__CLASS__ZWAVEPLUS__INFO>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>2</versionSupported>
<zwPlusVersion>1</zwPlusVersion>
<zwPlusRole>ROLE_TYPE_SLAVE_ALWAYS_ON</zwPlusRole>
<zwPlusNodeType>NODE_TYPE_ZWAVEPLUS_NODE</zwPlusNodeType>
<isGetSupported>true</isGetSupported>
</COMMAND__CLASS__ZWAVEPLUS__INFO>
</entry>
<entry>
<commandClass>COMMAND_CLASS_CONFIGURATION</commandClass>
<COMMAND__CLASS__CONFIGURATION>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>1</versionSupported>
<configParameters/>
</COMMAND__CLASS__CONFIGURATION>
</entry>
<entry>
<commandClass>COMMAND_CLASS_ALARM</commandClass>
<COMMAND__CLASS__ALARM>
<version>0</version>
<instances>1</instances>
<control>false</control>
<versionSupported>0</versionSupported>
<alarms/>
<v1Supported>false</v1Supported>
<isGetSupported>true</isGetSupported>
</COMMAND__CLASS__ALARM>
</entry>
<entry>
<commandClass>COMMAND_CLASS_MANUFACTURER_SPECIFIC</commandClass>
<COMMAND__CLASS__MANUFACTURER__SPECIFIC>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>2</versionSupported>
<initSerialNumber>false</initSerialNumber>
<deviceManufacturer>298</deviceManufacturer>
<deviceType>5</deviceType>
<deviceId>3</deviceId>
</COMMAND__CLASS__MANUFACTURER__SPECIFIC>
</entry>
<entry>
<commandClass>COMMAND_CLASS_POWERLEVEL</commandClass>
<COMMAND__CLASS__POWERLEVEL>
<version>1</version>
<instances>1</instances>
<control>false</control>
<versionSupported>1</versionSupported>
<powerLevel>0</powerLevel>
<powerTimeout>0</powerTimeout>
</COMMAND__CLASS__POWERLEVEL>
</entry>
<entry>
<commandClass>COMMAND_CLASS_ASSOCIATION</commandClass>
<COMMAND__CLASS__ASSOCIATION>
<version>2</version>
<instances>1</instances>
<control>false</control>
<versionSupported>2</versionSupported>
<maxGroups>3</maxGroups>
</COMMAND__CLASS__ASSOCIATION>
</entry>
<entry>
<commandClass>COMMAND_CLASS_VERSION</commandClass>
<COMMAND__CLASS__VERSION>
<version>2</version>
<instances>1</instances>
<control>false</control>
<versionSupported>2</versionSupported>
<libraryType>LIB_SLAVE_ENHANCED</libraryType>
<protocolVersion>4.5</protocolVersion>
<applicationVersion>3.96</applicationVersion>
<hardwareVersion>65</hardwareVersion>
</COMMAND__CLASS__VERSION>
</entry>
</supportedCommandClasses>
</endPoint>
</entry>
</endpoints>
<nodeNeighbors>
<int>59</int>
<int>65</int>
</nodeNeighbors>
<lastReceived>2025-02-24 21:56:56.442 UTC</lastReceived>
</node>

The 7 known channels for the working device are also exists somewhere in these commandClass structures of the new/unknown device.

I think I should wait until Chris will find time to generate the required XML file. Even if I would fully understand how to generated the final XML out of the OH generated XML it would be too error prone if I would do it manually.

Btw.: Do you know if there is some documentation/specification about the ZWave XML which OH is using for known devices?

This is in the blog but simply click create device and cut and paste the OH XML and press enter. The harder part is you will need a manual because the parameters and Association groups and documentation need to be added manually. No manual is a problem with buying from Ebay. My guess is this was a close-out or something. There is also an option to copy from another device but needs a reference. Many novices have done this

EDIT: It does look like the neo you could copy from 397 (or 1014) after the upload and see what happens

Thanks!

Btw.
In the quick guide, I found the FCC-ID and with a cross search I found a manual which includes the ZWave information (e.g. association groups etc.). Even if the device shows a different vendor and model number it seems to be the same, because it has the same FCC-ID.
I’ve already added these documents to the issue I’ve already filed on opensmarthouse.

My two cents; It will be a lot faster to give it a try and have any errors picked up during review. I could also take a look. Further, you could download a test binding XML and make any changes before it gets added to the binding and see how it works. Since the ZW DB is supposed to be community maintained, it is not going to be a priority. Could be months

I made a few changes to help, but since one was reversed, I figured you are editing also. Will wait. Group one should be lifeline and have the controller by default, the alarm general should be alarm power.

Ok, in the meantime Chris granted me access to the database and I’ve added the values with best of my knowledge. I’ve used the similar device Shenzhen Neo Electronics Co., Ltd NAS-WR01ZE Wall Plug Switch as a blue print. It has “nearly” exact the same config values (only the reset energy counter is missing), but the association groups are different.

So far my last question:
I’ve downloaded the xml file from the database (step 3b). But I can’t find the information in the blog to which JAR-file I need to add this xml file. Is there a naming convention for this xml file and in which sub-directory do I need to add it.

My guess is, I need to unzip the jar file in a temp directory, copy the new device xml file with the correct name to the correct sub-directory and use the jar-tool to re-create the jar file. After restarting OH, the new device should become now a known ZWave device. Is this correct?

Check out this post](Update ZWave binding with new/updated device xml). Besides the java method, some have just used a zip-like utility to add the file. The folder will be qolsys and file qz2101-840_0_0.xml.

EDIT: It might be good to have the ZW binding in Debug after the jar is updated with the device. It should confirm the parameters and Association groups. (The XML posted above shows three groups). There is a Debug screener for the openhab.log file (actually the name doesn’t matter) in the utility section of opensmarthouse.

1 Like

Ok, I think I understand the procedure and thanks for the hint about logging and this Debug screener.

Right now, I’m using OH with docker in version 4.3.2. I think I will first update to the latest version 4.3.3 before I make the changes to be as actual as possible because any docker image update would require the same procedure to add the new ZWave device.

I found the jar file inside my docker image (image: openhab/openhab:4.3.2-debian) at this location:

/openhab/userdata/tmp/mvn/org/openhab/addons/bundles/org.openhab.binding.zwave/4.3.2/org.openhab.binding.zwave-4.3.2.jar

Thanks a lot for your detailed help!

Glad it is working :grinning:. The reason for the debug was to see how the parameters and groups get populated (or not). Also, if not done already, run through the parameters to make sure they work as expected. You can still change the ZW DB if needed, even though you have marked for review

1 Like

A short feedback:
I’ve updated my docker image to OH 4.3.3 and added the new device xml to the zwave jar file as described and activated it. The zwave logging in debug level does not show any error and all channels are working (only the alarm channel I’ve not tested so far - but switching, watts, volts, amps and kWh channels are working). :grinning:

Question:
Do I need to do something in the opensmarthouse DB to “signal” that the device is working? I’m not sure if this new device will automatically find it’s way into the next major release of OH ZWave binding.

When you requested review, that meant it was working :wink: nothing more to do.

1 Like