Provide Z-Wave device descriptions from local file

I recently made an add-on that makes it possible to use Z-Wave device descriptions from local storage. It should work for OH versions back to 4.1.0, and means that you don’t have to wait for a database update to get your new device working - and it enables properly testing a configuration before publishing it in the database:

I’ve mentioned it in another thread, but have gotten no response. It’s currently considered “beta” simply because I’m the only one that has tested it. There are no bugs or limitations that I am aware of in the add-on itself, and if others test it and find it working, I can remove the “beta” designation, making it visible to more users.

To get hold of such files, you can download them directly from the database if you have an account there. If not, you can download the latest released versions (if you want to use them in an older OH installation, or tweak and test) from this folder structure:

1 Like

Hello!

This is very cool! Unfortunately I can’t get my ZEN48 added and I think I need some help.

  • Platform information:
    Hardware: Raspberry Pi 4 Model B Rev 1.5, 8GB
    OS: Openhabian 4.1.2
    Java Runtime Environment: (build 17.0.18+8-Debian-1deb11u1)
    openHAB version: 4.1.2
    zwave binding: 4.4.0.202412150400 (also 4.12)

  • Issue:
    Device definitions not filling in (edit:) “Device discovery could not resolve to a thingType! Manufacturer data not known.” and “Not initialized (ie node unknown), ignoring message.”

added Zooz ZEN58 800LR ( Low Voltage XS Relay – Z-Wave Alliance Product Catalog )
zen58_0_0.xml file from org.openhab.binding.zwave/src/main/resources/OH-INF/thing/zooz/zen58_0_0.xml at main · openhab/org.openhab.binding.zwave · GitHub

to /var/openhab/thingtypes

  • xml file permissions adjusted using openhabian-config’s fix permissions
  • Service restart, reboot, and powerdown no change.

This is with both Thing Type File Provider [4.1.0.0;6.0.0.0) and manually added Version 1.0.0-beta1 .jar (1.0.0.202512151917)

Is there any information I can provide to help?

Thank you for any help!

Ben

I’m not sure where to start, but first, you shouldn’t have to manually copy any JARs - you should just install it from the marketplace. Once you do, make sure that the log shows no errors/warnings that seem related.

When you add an XML file to $OPENHAB_CONF/thingtypes while OH is running, the file should be parsed immediately, and the log should hopefully show if there are any problems. It’s only the Z-Wave binding that needs OH to be restarted, because it caches all the thing types. But, the thing type should be added and be available for example from the API Explorer /thing-types endpoint right away. You should check if it’s in the API response or not, because that will tell us if the problem is that the thing type isn’t correctly “installed”, or if it’s the Z-Wave binding that doesn’t “get it”.

Thanks for the reply.

I did install your binding from the marketplace and when that didn’t work as expected, I manually installed the beta jar file to see if perhaps that would work. (I only ran one at a time of course.)

No errors show up in the /var/log/openhab/openhab.log or /var/log/openhab/events.log. Is there somewhere else I might look?

I’m sorry, I’m not familiar with API Explorer. I’ll research and see what it says.

Thank you!

Edit: OK, the new xml info is showing there.

{
    "UID": "zwave:zooz_zen58_00_000",
    "label": "ZEN58 XS Low Voltage Relay",
    "description": "XS Low Voltage Relay<br /> <h1>Overview</h1><p>Manual or z-wave on/off control for low voltage loads.  </p><p>Monitors analog dry contact inputs like open/close sensors.  </p><p>Installs behind your existing wall switch (single pole or 3-way).  </p><p>Z-wave Long Range for next -level wireless network</p><p>Remembers and restores on/off status after power failure</p><p>800 series z-wave and s2 SmartStart security.</p><p>Specs: </p><p>Power 9-40v ac/dc</p><p>Max load: 3A @ 240V.</p><p>Range: up to 300ft LoS and 1300ft with zwave long range enabled. </p><p>Indoor use only.</p><p>1.2\"x1\"x0.6\" (its so tiny!)</p> <br /> <h2>Inclusion Information</h2><p>Initiate inclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Exclusion Information</h2><p>Initiate exclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Wakeup Information</h2><p><br /></p>",
    "category": "Valve",
    "listed": false,
    "supportedBridgeTypeUIDs": [],
    "bridge": false
  }
]

Am I right to assume the issue is with xml then?

Start by removing the JAR file, uninstall and reinstall it from the marketplace.

Then, set the log level for org.openhab.io.thingtypes to DEBUG. You can do that from the log viewer:

Click the little “gear” in the lower right corner, and this window will appear:

Type in/paste org.openhab.io.thingtypes on the top and press Enter. Nothing “obvious” will happen, but it will then appear in the list below. Navigate/find it, and make sure it’s set to Debug:

Once that is done, you should see something in the log viewer as soon as you move a file into or out of the $OPENHAB_CONF/thingtypes folder.

Once this is done, you can use the API Explorer to check if the files have been registered:

Click “try it out” and then “Execute”.

This will generate a long JSON of all registered thing-types on your system:

You can click the “copy button” in the right lower corner and then paste it into any text editor. There you can search for and inspect the result of the XML files you have added. You can also use a binding ID to “filter” the results from the API, to get less results, or if you know the thing-type ID, you can query that directly using the other API endpoint for thing-types:

Once you see that your XML has been registered correctly, restart OH, and the Z-Wave binding should be able to recognize the device.

I haven’t used this before, but one thing I don’t see mentioned is the Scan. Based on general principles the device needs to be included via a scan while pressing the inclusion buttons.

Sorry, I didn’t realize that you were running 4.1.2. It should still work with 4.1.2, but I haven’t tested it on anything older than 4.2.3. So, there’s a chance that something doesn’t work for that reason.

The screenshots I made are from 5.1.2, so everything might not be the same. I see that there is no log viewer in that version, which makes it more complicated to set the log level to DEBUG. I guess the easiest way is to do it from the Karaf console.

The way to set the log level from the Karaf console should be:

log:set DEBUG org.openhab.io.thingtypes

For some reason however, this doesn’t work for me, it just responds with:

Error executing command: Unable to set level for logger

I don’t know why, I rarely use Karaf for such things. The other alternative is editing the logging configuration file manually:

One way or another, we need DEBUG logging to be enabled for org.openhab.io.thingtypes to see if it’s parsing the files or not. Once everything works, the DEBUG logging can be removed/set back to INFO again.

I’m not sure that I understand what you mean. The device must be “discovered” by OH for the thing-type to be used, but that is the same if the thing-type definition is embedded in the Z-Wave binding. All the add-on does is to make the thing-type available, everything else should work “the same way as before”. I don’t think you need to “re-include” the device, it should suffice to delete the Thing and then scan an discover it again.

Scan or discovered. What I mean is the Zstick must have been put in inclusion mode and the device added. Just want to confirm that adding the XML to the folder won’t work if the device is not on the zstick. I just don’t see that mentioned.

1 Like

Thanks guys. Yes, the controller sees the node, it just doesn’t fill in the device config stuff–which isn’t included in the databases I’ve tried.

I probably shouldn’t have edited my 2nd post to show the data from API Explorer (I would have saved you all of the screenshots, etc. – but I have no doubt sure someone may find it useful in the future.)

I’m reposting API Explorer device entry here:

{
    "UID": "zwave:zooz_zen58_00_000",
    "label": "ZEN58 XS Low Voltage Relay",
    "description": "XS Low Voltage Relay<br /> <h1>Overview</h1><p>Manual or z-wave on/off control for low voltage loads.  </p><p>Monitors analog dry contact inputs like open/close sensors.  </p><p>Installs behind your existing wall switch (single pole or 3-way).  </p><p>Z-wave Long Range for next -level wireless network</p><p>Remembers and restores on/off status after power failure</p><p>800 series z-wave and s2 SmartStart security.</p><p>Specs: </p><p>Power 9-40v ac/dc</p><p>Max load: 3A @ 240V.</p><p>Range: up to 300ft LoS and 1300ft with zwave long range enabled. </p><p>Indoor use only.</p><p>1.2\"x1\"x0.6\" (its so tiny!)</p> <br /> <h2>Inclusion Information</h2><p>Initiate inclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Exclusion Information</h2><p>Initiate exclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Wakeup Information</h2><p><br /></p>",
    "category": "Valve",
    "listed": false,
    "supportedBridgeTypeUIDs": [],
    "bridge": false
  }
]

It looks like the listing is there. Am I right to assume the issue is with xml then?

I’m going to try and upgade Openhabian in weekend. I have no idea what the latest 4.x version I can upgrade to, but I’ll make sure it’s at least 4.2.3. (I haven’t delved what exactly is involved to upgrade to 5.x so that would take more time to get there.)

Thank you for your efforts!

It seems like the add-on is working then. If you use the second thing-type endpoint, where you specify the thing-type UID (zwave:zooz_zen58_00_000), you’ll get some more info about channels and properties, for example:

{
  "channels": [
    {
      "description": "Batterinivå i prosent (0-100%)",
      "id": "battery-level",
      "label": "Batterinivå",
      "tags": [
        "Energy",
        "Measurement"
      ],
      "properties": {
        "binding:*:PercentType": "COMMAND_CLASS_BATTERY"
      },
      "category": "Battery",
      "stateDescription": {
        "minimum": 0,
        "maximum": 100,
        "step": 1,
        "pattern": "%.0f %%",
        "readOnly": true,
        "options": []
      },
      "advanced": false,
      "typeUID": "system:battery-level"
    }
  ],
  "channelGroups": [],
  "configParameters": [],
  "parameterGroups": [],
  "properties": {
    "versionMin": "3.2",
    "modelId": "FGK101",
    "vendor": "Fibargroup",
    "defaultAssociations": "1",
    "manufacturerId": "010F",
    "manufacturerRef": "0701:1001,0701:2001,0701:3001",
    "dbReference": "381"
  },
  "extensibleChannelTypeIds": [],
  "UID": "zwave:fibaro_fgk101_03_002",
  "label": "FGK101 Door Opening Sensor",
  "description": "Door Opening Sensor<br /> <h1>Overview</h1><p><strong>FIBARO Door/Window Sensor</strong> is a wireless, battery powered reed sensor compatible with the Z-Wave standard. Changing the device’s status will automatically send signal to the Z-Wave controller and associated devices. </p> <p>Sensor can be used to trigger scenes and everywhere there is a need for information about opening or closing of doors, windows, garage doors, etc. Opening is detected by separating the sensor’s body and the magnet.</p> <p>In addition the FIBARO Door/Window Sensor supports one DS18B20 temperature sensor and has one potential free input.</p> <br /> <h2>Inclusion Information</h2><p>Quickly, three times press the TMP button. </p> <br /> <h2>Exclusion Information</h2><p>Quickly, three times press the TMP button. </p> <br /> <h2>Wakeup Information</h2><p>To wake up the sensor manually, click one of the TMP buttons (while the other button is pressed).</p>",
  "category": "Door",
  "listed": false,
  "supportedBridgeTypeUIDs": [],
  "bridge": false
}

Does that seem to be populated as well?

No, nothing appears.

I’m posting the xml contents here. I don’t see any issues, but I’m probably the worst for spotting stuff like this. I did notice that the xml filename is zen58_0_0.xml. Should it be something like zen58_00_000.xml (grasping at straws)?

<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="zwave"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
  xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0
                      https://openhab.org/schemas/thing-description/v1.0.0">

  <thing-type id="zooz_zen58_00_000" listed="false">
    <label>ZEN58 XS Low Voltage Relay</label>
    <description><![CDATA[
XS Low Voltage Relay<br /> <h1>Overview</h1><p>Manual or z-wave on/off control for low voltage loads.  </p><p>Monitors analog dry contact inputs like open/close sensors.  </p><p>Installs behind your existing wall switch (single pole or 3-way).  </p><p>Z-wave Long Range for next -level wireless network</p><p>Remembers and restores on/off status after power failure</p><p>800 series z-wave and s2 SmartStart security.</p><p>Specs: </p><p>Power 9-40v ac/dc</p><p>Max load: 3A @ 240V.</p><p>Range: up to 300ft LoS and 1300ft with zwave long range enabled. </p><p>Indoor use only.</p><p>1.2"x1"x0.6" (its so tiny!)</p> <br /> <h2>Inclusion Information</h2><p>Initiate inclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Exclusion Information</h2><p>Initiate exclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Wakeup Information</h2><p><br /></p>
    ]]></description>
    <category>Valve</category>

    <!-- CHANNEL DEFINITIONS -->
    <channels>
      <channel id="switch_binary" typeId="switch_binary">
        <label>Switch</label>
        <properties>
          <property name="binding:*:OnOffType">COMMAND_CLASS_SWITCH_BINARY</property>
        </properties>
      </channel>
      <channel id="scene_number" typeId="scene_number">
        <label>Scene Number</label>
        <properties>
          <property name="binding:*:DecimalType">COMMAND_CLASS_CENTRAL_SCENE</property>
        </properties>
      </channel>
    </channels>

    <!-- DEVICE PROPERTY DEFINITIONS -->
    <properties>
      <property name="vendor">Zooz</property>
      <property name="modelId">ZEN58</property>
      <property name="manufacturerId">027A</property>
      <property name="manufacturerRef">0004:0322</property>
      <property name="dbReference">1687</property>
    </properties>

    <!-- CONFIGURATION DESCRIPTIONS -->
    <config-description>

      <!-- GROUP DEFINITIONS -->
      <parameter-group name="configuration">
        <context>setup</context>
        <label>Configuration Parameters</label>
      </parameter-group>

      <parameter-group name="association">
        <context>link</context>
        <label>Association Groups</label>
      </parameter-group>

      <!-- PARAMETER DEFINITIONS -->
      <parameter name="config_1_1" type="integer" groupName="configuration">
        <label>1: LED Indicator</label>
        <description><![CDATA[
LED Indicator options<br /> <h1>Overview</h1><p>Choose if you want the LED to indicate the on/off status of the load or if you want it to remain on or off at all times.</p><p>Values: 0 – LED always off; 1 – LED on when load on, LED off when load off. Default: 1</p>
        ]]></description>
        <default>1</default>
        <options>
          <option value="0">LED always off</option>
          <option value="1">LED on when load on, LED off when load off</option>
        </options>
      </parameter>

      <parameter name="config_2_1" type="integer" groupName="configuration">
        <label>2: On/Off Status After Power Failure</label>
        <description><![CDATA[
Controls for status after power failure<br /> <h1>Overview</h1><p>Set the on off status for the relay after power failure.</p>
        ]]></description>
        <default>2</default>
        <options>
          <option value="0">always off once restored</option>
          <option value="1">always on once restored</option>
          <option value="2">remembers and restores status</option>
        </options>
      </parameter>

      <parameter name="config_3_1" type="integer" groupName="configuration">
        <label>3: Status Report Type</label>
        <description><![CDATA[
Status Report Type<br /> <h1>Overview</h1><p>Choose physical (wall switch) and Z-Wave triggers for the relay to send a status change report to the hub.</p>
        ]]></description>
        <default>1</default>
      </parameter>

      <parameter name="config_4_1" type="integer" groupName="configuration">
        <label>4: Scene Control</label>
        <description><![CDATA[
Scene Control<br /> <h1>Overview</h1><p>Enable or disable scene control functionality for quick double tap triggers.</p>
        ]]></description>
        <default>1</default>
      </parameter>

      <parameter name="config_5_1" type="integer" groupName="configuration">
        <label>5: Input Type</label>
        <description><![CDATA[
Input Type (input to the relay, not load)<br /> <h1>Overview</h1><p>Choose the wall switch or input type you want to connect to the relay. *Not all values are supported on all hubs. Please check the How to Access the Advanced Settings for My ZEN58 article for your hub for more information.</p><p>IMPORTANT: If you set this parameter to value 4-12, you’ll need to exclude and re-include the device (without changing any settings) so that a child device is created for the input of your choice!</p><p>NOTE: When the relay is first powered, the default settings should auto-detect the external switch type after it has been toggled once. If auto-detect fails to detect the proper input type and you are using a hub that does not provide access to the advanced settings, you can also manually configure the external switch type: Quickly press the Z-Wave Button 5 times within 2 seconds. The relay will enter into a switch type selecting mode. The LED will flash in green to indicate the switch type it should connect: Flash once every 2 seconds – Toggle Switch; Flash twice every 2 seconds – Momentary Switch; Flash 3 times every 2 seconds – Toggle switch with fixed actions (NO/NC Switch); Flash 4 times every 2 seconds – 3-way impulse control.</p><p>When in the switch type selecting mode, press the Z-Wave Button ONCE in sequence to shift the switch types.</p><p>After the switch type matches the external switch you have connected, press and hold the Z-Wave Button for more than 1 second to confirm the selection. If the selection is not confirmed in 30 seconds, the Relay will exit the switch type selecting mode.</p><p>SEE https://www.support.getzooz.com/kb/article/2016-zen58-low-voltage-xs-relay-advanced-settings/ because this parameter documentation is huge</p>
        ]]></description>
        <default>0</default>
        <options>
          <option value="0">automatic detection</option>
          <option value="1">toggle switch (state changes whenever the switch is toggled)</option>
          <option value="2">momentary push button</option>
          <option value="3">toggle switch (light on when the switch is toggled up, etc)</option>
          <option value="4">leak alarm (water sensor)</option>
          <option value="5">heat alarm</option>
          <option value="6">motion alert</option>
          <option value="7">open/close alert (door sensor)</option>
          <option value="8">CO alarm</option>
          <option value="9">CO2 alarm</option>
          <option value="10">on/off report (dry contact switch/sensor) *SEE NOTES*</option>
          <option value="11">garage door mode</option>
          <option value="12">garage door mode for the relay</option>
        </options>
        <limitToOptions>false</limitToOptions>
      </parameter>

      <parameter name="config_6_1" type="integer" groupName="configuration">
        <label>6: Inclusion from Switch</label>
        <description><![CDATA[
Inclusion from Switch<br /> <h1>Overview</h1><p>Enable or disable the ability to put the ZEN58 into inclusion / exclusion mode from the connected wall switch by toggling it 3 times quickly. Each toggle is an up-down sequence so you need to perform the following as quickly as possible to put the device in inclusion/exclusion mode: up-down-up-down-up-down.</p>
        ]]></description>
        <default>1</default>
        <options>
          <option value="0">Disable inclusion from switch</option>
          <option value="1">Enable inclusion from switch</option>
        </options>
      </parameter>

      <parameter name="config_7_4" type="integer" groupName="configuration">
        <label>7: Auto Turn-Off Timer</label>
        <description><![CDATA[
Auto Turn-Off Timer<br /> <h1>Overview</h1><p>Use this parameter to enable or disable the auto turn-off timer function (the time after which you want the relay to automatically turn off once it has been turned on). Auto-off timer will automatically turn the relay off after x seconds once it has been turned on.</p>
        ]]></description>
        <default>0</default>
        <options>
          <option value="0">Timer disabled</option>
        </options>
        <limitToOptions>false</limitToOptions>
      </parameter>

      <parameter name="config_8_4" type="integer" groupName="configuration">
        <label>8: Auto Turn-On Timer</label>
        <description><![CDATA[
Auto Turn-On Timer<br /> <h1>Overview</h1><p>Use this parameter to enable or disable the auto turn-on timer function (the time after which you want the relay to automatically turn on once it has been turned off). Auto-on timer will automatically turn the relay on after x seconds once it has been turned off.</p>
        ]]></description>
        <default>0</default>
        <options>
          <option value="0">Timer disabled</option>
        </options>
        <limitToOptions>false</limitToOptions>
      </parameter>

      <parameter name="config_9_1" type="integer" groupName="configuration">
        <label>9: Relay Control (Smart Bulb Mode)</label>
        <description><![CDATA[
Relay Control (Smart Bulb Mode)<br /> <h1>Overview</h1><p>Enable or disable physical and Z-Wave on/off control. Disable both physical switch / button and Z-Wave control for smart bulbs (use central scene triggers). Scene control and other functionality will still be available from the connected wall switch.</p>
        ]]></description>
        <default>1</default>
        <options>
          <option value="0">Disable control from switch and button</option>
          <option value="1">Enable switch, button, and Z-Wave control</option>
          <option value="2">Disable switch, button, and Z-Wave control</option>
        </options>
      </parameter>

      <parameter name="config_10_1" type="integer" groupName="configuration">
        <label>10: Relay Type (NO/NC)</label>
        <description><![CDATA[
Relay Type (NO/NC)<br /> <h1>Overview</h1><p>Choose if you'd like the relay to act as a normally open (on when the circuit is closed, off when the circuit it open), or a normally closed relay (off when the circuit is closed, on when the circuit is open).</p>
        ]]></description>
        <default>0</default>
        <options>
          <option value="0">NO (normally open)</option>
          <option value="1">NC (normally closed)</option>
        </options>
      </parameter>

      <parameter name="config_11_1" type="integer" groupName="configuration">
        <label>11: Input Trigger</label>
        <description><![CDATA[
Input Trigger<br /> <h1>Overview</h1><p>Choose if you’d like the connected input (wall switch or other type of input) to trigger the load connected to the relay or if you want to use the input reports for monitoring only and separate the output from the input.</p>
        ]]></description>
        <default>0</default>
        <options>
          <option value="0">Input trigger enabled</option>
          <option value="1">Input trigger disabled</option>
        </options>
      </parameter>

      <parameter name="config_12_1" type="integer" groupName="configuration">
        <label>12: Scene Control Multi-Tap</label>
        <description><![CDATA[
Scene Control Multi-Tap<br /> <h1>Overview</h1><p>Disable multi-tap scene control so that only single taps from the connected wall switch report via central scene. Once this functionality is disabled, double taps, held, released, 3-tap, 4-tap, and 5-tap events will be ignored and won't be reported to the hub. The inclusion and exclusion 3-toggle functionality from the external switch will also be disabled.</p>
        ]]></description>
        <default>0</default>
        <options>
          <option value="0">multi-tap for scene control disabled</option>
          <option value="1">multi-tap for scene control enabled</option>
        </options>
      </parameter>

      <parameter name="config_13_1" type="integer" groupName="configuration">
        <label>13: Reversed Reports For Input</label>
        <description><![CDATA[
Reversed Reports For Input<br /> <h1>Overview</h1><p>Reverse the reported values for your selected input type (value 1). Expert users only. See manual for details.</p><p>NOTE: This will not affect the relay behavior if you leave the input linked to the output (parameter 11). It will still trigger the relay to turn on when the circuit is closed, regardless of the reported value. This setting only affects the reports displayed in the hub for the input and does not affect the relay (output) behavior.</p>
        ]]></description>
        <default>0</default>
        <options>
          <option value="0">values reported as normally open, not reversed</option>
          <option value="1">input values reversed</option>
        </options>
      </parameter>

      <!-- ASSOCIATION DEFINITIONS -->
      <parameter name="group_1" type="text" groupName="association" multiple="true">
        <label>1: Lifeline Group</label>
        <description><![CDATA[
<br /> <h1>Overview</h1><p>Lifeline Group communication with up to 5 devices. This device will send BASIC REPORT and SWITCH BINARY REPORT to Group 1</p>
        ]]></description>
        <multipleLimit>5</multipleLimit>
      </parameter>

      <parameter name="group_2" type="text" groupName="association" multiple="true">
        <label>2: On/Off Control</label>
        <description><![CDATA[
<br /> <h1>Overview</h1><p>On/Off Control: This device will send BASIC SET command to Group 2 with up to 5 devices for On/Off control when the status changes. Supported when Parameter 5 is set to a values 0-9.</p>
        ]]></description>
        <multipleLimit>5</multipleLimit>
      </parameter>

      <parameter name="group_3" type="text" groupName="association" multiple="true">
        <label>3: EP2 On/Off Control</label>
        <description><![CDATA[
<br /> <h1>Overview</h1><p>EP2 On/Off Control: This device will send BASIC SET command to Group 3 (for EP2) with up to 5 devices for On/Off control when the status changes. Supported when Parameter 5 is set to a value of 10.</p><p>You can set direct association to have the relay control another Z-Wave device independently of the hub by using Group 2 or Group 3. Not every hub exposes direct association settings in the interface so please check with your system provider for details.</p>
        ]]></description>
        <multipleLimit>5</multipleLimit>
      </parameter>

      <!-- STATIC DEFINITIONS -->
      <parameter name="node_id" type="integer" min="1" max="232" readOnly="true" required="true">
        <label>Node ID</label>
        <advanced>true</advanced>
      </parameter>

    </config-description>

  </thing-type>

</thing:thing-descriptions>

Thing “Thing Type Provider” is actually a channel type provider and channel group type provider too. So, depending on what the XML contains, it could be necessary to check any added channel types in the API explorer too.

The name of the XML file doesn’t matter at all. When I create a file and paste the content you posted into it, it is picked up and I get this when I query zwave:zooz_zen58_00_000:

{
  "channels": [],
  "channelGroups": [],
  "configParameters": [],
  "parameterGroups": [],
  "properties": {
    "modelId": "ZEN58",
    "vendor": "Zooz",
    "manufacturerId": "027A",
    "manufacturerRef": "0004:0322",
    "dbReference": "1687"
  },
  "extensibleChannelTypeIds": [],
  "UID": "zwave:zooz_zen58_00_000",
  "label": "ZEN58 XS Low Voltage Relay",
  "description": "XS Low Voltage Relay<br /> <h1>Overview</h1><p>Manual or z-wave on/off control for low voltage loads.  </p><p>Monitors analog dry contact inputs like open/close sensors.  </p><p>Installs behind your existing wall switch (single pole or 3-way).  </p><p>Z-wave Long Range for next -level wireless network</p><p>Remembers and restores on/off status after power failure</p><p>800 series z-wave and s2 SmartStart security.</p><p>Specs: </p><p>Power 9-40v ac/dc</p><p>Max load: 3A @ 240V.</p><p>Range: up to 300ft LoS and 1300ft with zwave long range enabled. </p><p>Indoor use only.</p><p>1.2\"x1\"x0.6\" (its so tiny!)</p> <br /> <h2>Inclusion Information</h2><p>Initiate inclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Exclusion Information</h2><p>Initiate exclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Wakeup Information</h2><p><br /></p>",
  "category": "Valve",
  "listed": false,
  "supportedBridgeTypeUIDs": [],
  "bridge": false
}

So, the file itself seems to “work”. When it comes to whether the necessary information is in the file, I can’t really say, I think @apella12 is much better suited to answer that.

It does strike me a bit odd that the definition shows no channels… that might be part of the problem.

There is one more thing to check. I think there should be an XML file in the userdata/zwave folder (it is different from the one you downloaded from the binding). Check this line "manufacturerRef": "0004:0322"in both files. Devices do not go by model ZEN58, but by these values. They need to be the same.

EDIT: There are also two additional things I’m not wild about in the downloaded XML (from the binding). The device is new, so not sure how much has been tested. I don’t think they are related to your current issue but could cause problems down the line.

  1. The controller is not automatically assigned to group 1. You’ll need to add it once you see that line on the device UI page and 2) The basic Command Class was not added to the switch. That sometimes causes problems with operating the device manually. I’d modify the downloaded XML like so; (just to make sure)
<property name="binding:*:OnOffType">COMMAND_CLASS_SWITCH_BINARY,COMMAND_CLASS_BASIC</property>

EDIT: I changed these two elements in the ZW DB for the future

I see now that there is a problem with the XML, I found this error in my log:

com.thoughtworks.xstream.io.StreamException:
at com.thoughtworks.xstream.io.xml.StaxReader.pullNextEvent(StaxReader.java:74)
at com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148)
at com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:141)
at com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:118)
at com.thoughtworks.xstream.io.xml.AbstractPullReader.moveDown(AbstractPullReader.java:103)
at com.thoughtworks.xstream.io.xml.StaxReader.<init>(StaxReader.java:45)
at com.thoughtworks.xstream.io.xml.StaxDriver.createStaxReader(StaxDriver.java:173)
at com.thoughtworks.xstream.io.xml.StaxDriver.createReader(StaxDriver.java:110)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1391)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1345)
at org.openhab.core.config.core.xml.util.XmlDocumentReader.readFromXML(XmlDocumentReader.java:106)
at org.openhab.io.thingtypes.internal.FileProcessor.add(FileProcessor.java:193)
at org.openhab.io.thingtypes.internal.FileProcessor.processWatchEvent(FileProcessor.java:165)
at org.openhab.core.internal.service.WatchServiceImpl$Listener.notify(WatchServiceImpl.java:293)
at org.openhab.core.internal.service.WatchServiceImpl.lambda$6(WatchServiceImpl.java:278)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at org.openhab.core.internal.service.WatchServiceImpl.doNotify(WatchServiceImpl.java:278)
at org.openhab.core.internal.service.WatchServiceImpl.notifyListeners(WatchServiceImpl.java:262)
at org.openhab.core.internal.service.WatchServiceImpl.lambda$4(WatchServiceImpl.java:232)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
at [row,col,system-id]: [1,0,"file:/C:/Repos/Java/openHAB/OPENHA~1/DISTRI~1/openhab/target/OPENHA~1.0-S/conf/thingtypes/zen58_0_0.xml"]
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:701)
at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2235)
at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2141)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1180)
at com.thoughtworks.xstream.io.xml.StaxReader.pullNextEvent(StaxReader.java:58)
... 32 more

The gist of this error seems to be Unexpected EOF in prolog.

It seems I tried zwave:zooz_zen58_00_000 in API Exp thing-types section. (I didn’t see the thing-types/{thingTypeID} entry.

Here is what comes up:

{
  "channels": [
    {
      "description": "Switch the power on and off",
      "id": "switch_binary",
      "label": "Switch",
      "tags": [],
      "properties": {
        "binding:*:OnOffType": "COMMAND_CLASS_SWITCH_BINARY"
      },
      "category": "Switch",
      "advanced": false,
      "typeUID": "zwave:switch_binary"
    },
    {
      "description": "Triggers when a scene button is pressed",
      "id": "scene_number",
      "label": "Scene Number",
      "tags": [],
      "properties": {
        "binding:*:DecimalType": "COMMAND_CLASS_CENTRAL_SCENE"
      },
      "category": "",
      "advanced": false,
      "typeUID": "zwave:scene_number"
    }
  ],
  "channelGroups": [],
  "configParameters": [
    {
      "description": "Sets the node ID<BR/>The node ID is assigned by the controller and can not be changed.",
      "label": "Node ID",
      "name": "node_id",
      "required": true,
      "type": "INTEGER",
      "min": 1,
      "max": 232,
      "readOnly": true,
      "multiple": false,
      "groupName": "thingcfg",
      "advanced": true,
      "verify": false,
      "limitToOptions": true,
      "options": [],
      "filterCriteria": []
    }
  ],
  "parameterGroups": [],
  "properties": {
    "modelId": "ZEN58",
    "vendor": "Zooz",
    "manufacturerId": "027A",
    "manufacturerRef": "0004:0322",
    "dbReference": "1687"
  },
  "extensibleChannelTypeIds": [],
  "UID": "zwave:zooz_zen58_00_000",
  "label": "ZEN58 XS Low Voltage Relay",
  "description": "XS Low Voltage Relay<br /> <h1>Overview</h1><p>Manual or z-wave on/off control for low voltage loads.  </p><p>Monitors analog dry contact inputs like open/close sensors.  </p><p>Installs behind your existing wall switch (single pole or 3-way).  </p><p>Z-wave Long Range for next -level wireless network</p><p>Remembers and restores on/off status after power failure</p><p>800 series z-wave and s2 SmartStart security.</p><p>Specs: </p><p>Power 9-40v ac/dc</p><p>Max load: 3A @ 240V.</p><p>Range: up to 300ft LoS and 1300ft with zwave long range enabled. </p><p>Indoor use only.</p><p>1.2\"x1\"x0.6\" (its so tiny!)</p> <br /> <h2>Inclusion Information</h2><p>Initiate inclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Exclusion Information</h2><p>Initiate exclusion on hub and press the z-wave button 3 times as quickly as possible.</p> <br /> <h2>Wakeup Information</h2><p><br /></p>",
  "category": "Valve",
  "listed": false,
  "supportedBridgeTypeUIDs": [],
  "bridge": false
}

It does seem your binding is working. I’ll do the openhabian upgrade this weekend and will report back. Thanks again!

1 Like

I don’t know if an upgrade will make a difference, the thing-type add-on it seems to be fine with the version you’re running. But, there can be other things in the Z-Wave bindings or whatnot that causes issues, I don’t know.

What is a bit strange is how you got the channels populated and I didn’t, but maybe I did something wrong in my haste. I’ll see if I find some reason.

I also noticed one little thing I’ll change in the add-on: It doesn’t really capture and log the parsing error, I’ll make some improvements there to hopefully make it a bit easier to find such errors.

Thanks.

The EOF thing bothers me. I literally just downloaded the xml raw. I’m thinking that’s where the problem is? I think I’ll wait until your new version comes out before messing with the xml (so I can see if my monkeying around with it fixes it). :grin:

Thank you again. Your efforts are really appreciated.