Zooz zen17 relay/sensor

I am in the process of installing a watercop in my house. I need to have two momentary contact relays to turn the unit on or off. I also needed to monitor the status of the unit, this is in case a remote sensor turns the water off this should let me know. I discussed it with Zooz via email. This is their response:

As we understand it, you would like to remotely trigger the Watercop with a momentary signal from the ZEN17 relays on the output side and you would also like to monitor the Watercop open/close operation on the input side by connecting contacts 2, 3, and 4 to the low-voltage input terminals on the ZEN17 - is that correct?

In that scenario, there will be no external wall switch or manual push button switches connected to the watercop or the relays, all connections will be done directly between the Watercop and the ZEN17. If that’s the case, then it will work just fine. Note that you could only use the ZEN17 here and not the ZEN16 (since it can’t accept low-voltage inputs) but we haven’t verified compatibility of the ZEN17 with OpenHAB unfortunately so it’s possible not all features are available and you would be purchasing the device at your own risk.

Please note that they say what everyone is discussing is within the capability of the unit, however they are not sure if we can access this in openHAB. I ordered a unit, with the intention of trying to use it. If I cannot, then I will use the relays and monitor the unit through some other means.

I’d like to add to this discussion. I think I’ve read it over enough to have something to add. That being said I’m a pleb with this stuff and do it for fun and to learn. Forgive me if I’m ignorant to something here.

The earlier provided XML differs from mine. This unit has options for a couple contacts to be set as sensors. I have the unit set as such, excluded and reincluded. The XML refers to a SENSOR_BINARY in addition to the SWITCH_BINARY. I didn’t see this in the earlier XML. I assume it was for the other mode of operation option for this. Could this be the reference to the channels that should be a contact sensors? The idea is that I could connect a couple magnetic reeds to act as a switch to sense whether the door is closed or not.

Thanks for your time.

<node>
  <homeId>0xeddc42cd</homeId>
  <nodeId>21</nodeId>
  <version>4</version>
  <manufacturer>0x27a</manufacturer>
  <deviceId>0xa00a</deviceId>
  <deviceType>0x7000</deviceType>
  <listening>true</listening>
  <frequentlyListening>false</frequentlyListening>
  <routing>true</routing>
  <security>false</security>
  <beaming>true</beaming>
  <maxBaudRate>40000</maxBaudRate>
  <sleepDelay>1000</sleepDelay>
  <nodeInformationFrame>
    <commandClass>COMMAND_CLASS_ZWAVEPLUS_INFO</commandClass>
    <commandClass>COMMAND_CLASS_SWITCH_BINARY</commandClass>
    <commandClass>COMMAND_CLASS_BASIC</commandClass>
    <commandClass>COMMAND_CLASS_ASSOCIATION</commandClass>
    <commandClass>COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION</commandClass>
    <commandClass>COMMAND_CLASS_ASSOCIATION_GRP_INFO</commandClass>
    <commandClass>COMMAND_CLASS_TRANSPORT_SERVICE</commandClass>
    <commandClass>COMMAND_CLASS_VERSION</commandClass>
    <commandClass>COMMAND_CLASS_MANUFACTURER_SPECIFIC</commandClass>
    <commandClass>COMMAND_CLASS_DEVICE_RESET_LOCALLY</commandClass>
    <commandClass>COMMAND_CLASS_POWERLEVEL</commandClass>
    <commandClass>COMMAND_CLASS_CONFIGURATION</commandClass>
    <commandClass>COMMAND_CLASS_MULTI_CHANNEL</commandClass>
    <commandClass>COMMAND_CLASS_SECURITY_2</commandClass>
    <commandClass>COMMAND_CLASS_SUPERVISION</commandClass>
    <commandClass>COMMAND_CLASS_FIRMWARE_UPDATE_MD</commandClass>
    <commandClass>COMMAND_CLASS_ALARM</commandClass>
    <commandClass>COMMAND_CLASS_SENSOR_BINARY</commandClass>
  </nodeInformationFrame>
  <associationGroups class="concurrent-hash-map">
    <entry>
      <int>1</int>
      <associationGroup>
        <index>1</index>
        <maxNodes>0</maxNodes>
        <associations>
          <associationMember>
            <node>1</node>
            <endpoint>1</endpoint>
          </associationMember>
        </associations>
      </associationGroup>
    </entry>
    <entry>
      <int>2</int>
      <associationGroup>
        <index>2</index>
        <maxNodes>0</maxNodes>
        <associations/>
      </associationGroup>
    </entry>
    <entry>
      <int>3</int>
      <associationGroup>
        <index>3</index>
        <maxNodes>0</maxNodes>
        <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_NOT_USED</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>2</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>2</versionSupported>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__SWITCH__BINARY>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_SENSOR_BINARY</commandClass>
            <COMMAND__CLASS__SENSOR__BINARY>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <isGetSupported>true</isGetSupported>
              <types/>
            </COMMAND__CLASS__SENSOR__BINARY>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ASSOCIATION_GRP_INFO</commandClass>
            <COMMAND__CLASS__ASSOCIATION__GRP__INFO>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>3</versionSupported>
              <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>2</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_MULTI_CHANNEL</commandClass>
            <COMMAND__CLASS__MULTI__CHANNEL>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>4</versionSupported>
              <useDestEndpointAsSource>false</useDestEndpointAsSource>
              <endpointsAreTheSameDeviceClass>false</endpointsAreTheSameDeviceClass>
            </COMMAND__CLASS__MULTI__CHANNEL>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_CONFIGURATION</commandClass>
            <COMMAND__CLASS__CONFIGURATION>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>4</versionSupported>
              <configParameters>
                <entry>
                  <int>1</int>
                  <configurationParameter>
                    <index>1</index>
                    <size>1</size>
                    <value>0</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>2</int>
                  <configurationParameter>
                    <index>2</index>
                    <size>1</size>
                    <value>7</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>3</int>
                  <configurationParameter>
                    <index>3</index>
                    <size>1</size>
                    <value>7</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>5</int>
                  <configurationParameter>
                    <index>5</index>
                    <size>1</size>
                    <value>1</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>6</int>
                  <configurationParameter>
                    <index>6</index>
                    <size>4</size>
                    <value>0</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>7</int>
                  <configurationParameter>
                    <index>7</index>
                    <size>4</size>
                    <value>0</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>8</int>
                  <configurationParameter>
                    <index>8</index>
                    <size>4</size>
                    <value>0</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>9</int>
                  <configurationParameter>
                    <index>9</index>
                    <size>4</size>
                    <value>0</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>10</int>
                  <configurationParameter>
                    <index>10</index>
                    <size>1</size>
                    <value>0</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>11</int>
                  <configurationParameter>
                    <index>11</index>
                    <size>1</size>
                    <value>0</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>15</int>
                  <configurationParameter>
                    <index>15</index>
                    <size>1</size>
                    <value>1</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>16</int>
                  <configurationParameter>
                    <index>16</index>
                    <size>1</size>
                    <value>1</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>17</int>
                  <configurationParameter>
                    <index>17</index>
                    <size>1</size>
                    <value>1</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>18</int>
                  <configurationParameter>
                    <index>18</index>
                    <size>1</size>
                    <value>1</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
                <entry>
                  <int>24</int>
                  <configurationParameter>
                    <index>24</index>
                    <size>1</size>
                    <value>0</value>
                    <readOnly>false</readOnly>
                    <writeOnly>false</writeOnly>
                  </configurationParameter>
                </entry>
              </configParameters>
            </COMMAND__CLASS__CONFIGURATION>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ALARM</commandClass>
            <COMMAND__CLASS__ALARM>
              <version>8</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>8</versionSupported>
              <alarms/>
              <v1Supported>true</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>634</deviceManufacturer>
              <deviceType>28672</deviceType>
              <deviceId>40970</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_FIRMWARE_UPDATE_MD</commandClass>
            <COMMAND__CLASS__FIRMWARE__UPDATE__MD>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>5</versionSupported>
            </COMMAND__CLASS__FIRMWARE__UPDATE__MD>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ASSOCIATION</commandClass>
            <COMMAND__CLASS__ASSOCIATION>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>3</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>3</versionSupported>
              <libraryType>LIB_SLAVE_ENHANCED</libraryType>
              <protocolVersion>7.13</protocolVersion>
              <applicationVersion>1.3</applicationVersion>
              <hardwareVersion>1</hardwareVersion>
            </COMMAND__CLASS__VERSION>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION</commandClass>
            <COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
              <version>3</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>4</versionSupported>
              <maxGroups>3</maxGroups>
            </COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
          </entry>
        </supportedCommandClasses>
      </endPoint>
    </entry>
    <entry>
      <int>1</int>
      <endPoint>
        <deviceClass>
          <basicDeviceClass>BASIC_TYPE_ROUTING_SLAVE</basicDeviceClass>
          <genericDeviceClass>GENERIC_TYPE_SWITCH_BINARY</genericDeviceClass>
          <specificDeviceClass>SPECIFIC_TYPE_NOT_USED</specificDeviceClass>
        </deviceClass>
        <endpointId>1</endpointId>
        <secureCommandClasses/>
        <supportedCommandClasses class="concurrent-hash-map">
          <entry>
            <commandClass>COMMAND_CLASS_BASIC</commandClass>
            <COMMAND__CLASS__BASIC>
              <endpoint reference="../../../.."/>
              <version>0</version>
              <instances>0</instances>
              <control>false</control>
              <versionSupported>0</versionSupported>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__BASIC>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_SWITCH_BINARY</commandClass>
            <COMMAND__CLASS__SWITCH__BINARY>
              <endpoint reference="../../../.."/>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__SWITCH__BINARY>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_SENSOR_BINARY</commandClass>
            <COMMAND__CLASS__SENSOR__BINARY>
              <endpoint reference="../../../.."/>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <isGetSupported>true</isGetSupported>
              <types>
                <binarySensorType>DOORWINDOW</binarySensorType>
              </types>
            </COMMAND__CLASS__SENSOR__BINARY>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ASSOCIATION_GRP_INFO</commandClass>
            <COMMAND__CLASS__ASSOCIATION__GRP__INFO>
              <endpoint reference="../../../.."/>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
              <autoSubscribeGroups/>
            </COMMAND__CLASS__ASSOCIATION__GRP__INFO>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ZWAVEPLUS_INFO</commandClass>
            <COMMAND__CLASS__ZWAVEPLUS__INFO>
              <endpoint reference="../../../.."/>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
              <zwPlusVersion>2</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_ALARM</commandClass>
            <COMMAND__CLASS__ALARM>
              <endpoint reference="../../../.."/>
              <version>8</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>8</versionSupported>
              <alarms>
                <entry>
                  <alarmType>ACCESS_CONTROL</alarmType>
                  <alarmState>
                    <alarmType>ACCESS_CONTROL</alarmType>
                    <reportedEvents/>
                    <outer-class reference="../../../.."/>
                  </alarmState>
                </entry>
              </alarms>
              <v1Supported>true</v1Supported>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__ALARM>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ASSOCIATION</commandClass>
            <COMMAND__CLASS__ASSOCIATION>
              <endpoint reference="../../../.."/>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <maxGroups>2</maxGroups>
            </COMMAND__CLASS__ASSOCIATION>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION</commandClass>
            <COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
              <endpoint reference="../../../.."/>
              <version>3</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>3</versionSupported>
              <maxGroups>2</maxGroups>
            </COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
          </entry>
        </supportedCommandClasses>
      </endPoint>
    </entry>
    <entry>
      <int>2</int>
      <endPoint>
        <deviceClass>
          <basicDeviceClass>BASIC_TYPE_ROUTING_SLAVE</basicDeviceClass>
          <genericDeviceClass>GENERIC_TYPE_SWITCH_BINARY</genericDeviceClass>
          <specificDeviceClass>SPECIFIC_TYPE_NOT_USED</specificDeviceClass>
        </deviceClass>
        <endpointId>2</endpointId>
        <secureCommandClasses/>
        <supportedCommandClasses class="concurrent-hash-map">
          <entry>
            <commandClass>COMMAND_CLASS_BASIC</commandClass>
            <COMMAND__CLASS__BASIC>
              <endpoint reference="../../../.."/>
              <version>0</version>
              <instances>0</instances>
              <control>false</control>
              <versionSupported>0</versionSupported>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__BASIC>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_SWITCH_BINARY</commandClass>
            <COMMAND__CLASS__SWITCH__BINARY>
              <endpoint reference="../../../.."/>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__SWITCH__BINARY>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_SENSOR_BINARY</commandClass>
            <COMMAND__CLASS__SENSOR__BINARY>
              <endpoint reference="../../../.."/>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <isGetSupported>true</isGetSupported>
              <types>
                <binarySensorType>DOORWINDOW</binarySensorType>
              </types>
            </COMMAND__CLASS__SENSOR__BINARY>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ASSOCIATION_GRP_INFO</commandClass>
            <COMMAND__CLASS__ASSOCIATION__GRP__INFO>
              <endpoint reference="../../../.."/>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
              <autoSubscribeGroups/>
            </COMMAND__CLASS__ASSOCIATION__GRP__INFO>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ZWAVEPLUS_INFO</commandClass>
            <COMMAND__CLASS__ZWAVEPLUS__INFO>
              <endpoint reference="../../../.."/>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
              <zwPlusVersion>2</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_ALARM</commandClass>
            <COMMAND__CLASS__ALARM>
              <endpoint reference="../../../.."/>
              <version>8</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>8</versionSupported>
              <alarms>
                <entry>
                  <alarmType>ACCESS_CONTROL</alarmType>
                  <alarmState>
                    <alarmType>ACCESS_CONTROL</alarmType>
                    <reportedEvents/>
                    <outer-class reference="../../../.."/>
                  </alarmState>
                </entry>
              </alarms>
              <v1Supported>true</v1Supported>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__ALARM>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ASSOCIATION</commandClass>
            <COMMAND__CLASS__ASSOCIATION>
              <endpoint reference="../../../.."/>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <maxGroups>2</maxGroups>
            </COMMAND__CLASS__ASSOCIATION>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION</commandClass>
            <COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
              <endpoint reference="../../../.."/>
              <version>3</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>3</versionSupported>
              <maxGroups>2</maxGroups>
            </COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
          </entry>
        </supportedCommandClasses>
      </endPoint>
    </entry>
  </endpoints>
  <nodeNeighbors>
    <int>1</int>
    <int>3</int>
    <int>4</int>
    <int>6</int>
    <int>7</int>
    <int>18</int>
  </nodeNeighbors>
  <lastReceived>2022-02-28 23:08:24.603 UTC</lastReceived>
</node>

I also have this device, and have excluded and included the device several times and cannot get the sensors to show up.

Same for me. I bought a ZEN17 today, and it’s supposed to show two inputs (S1 and S2) and have two output “buttons” (R1 and R2).
However, only the output buttons are showing up in OpenHab 3.2.0.
I have emailed Zooz, asking for help.

According to the docs, it just has two switch channels. If that’s incorrect, then possibly the database requires an update.

https://www.openhab.org/addons/bindings/zwave/thing.html?thingTypeUID=zooz_zen17_00_000

It’s also possible that the two channels provide both functions - ie send a command and it changes the relays, and when the device sends a status, it’s the input status. This depends on how the device is programmed.

That I can rule out. The switches represent the status of the relay (ON or OFF) and is not related to the input sensors.

(The device can be configured so that the input sensors connect directly to the output relays, but once you disable that and configure the input sensors as independent, there are supposed to be 4 endpoints (2 input and 2 output). Not sure how the device is supposed to do that magic. It says in the manual you have to exclude and re-add the device to your Z-Wave network once you make such a change to make the new endpoints visible, but they are not showing up for me, despite multiple attempts.)

The database is only configured for these two channels, so no matter how many times you include and exclude, this will simply not change unless the extra channels are added to the database.

Interesting. I mainly come from Zigbee where the device is reporting its capabilities and what channels it has. Sorry for the confusion.

Is there a way to play around with the XML defintions on a live OpenHab system?
(I’d prefer to not having to shut it down / restarting repeatedly because of the fussy Aqara sensors I have connected…)

ZWave also does this, but when the ZWave binding was written, it was not possible for the binding to define channels dynamically - they had to be defined in the XML file. When the Zigbee binding was written, it was then possible to define the channels dynamically - hence the different approach in the way the bindings work.

To rewrite the ZWave binding is a big task, so it’s stuck with this limitation.

Not really - it must be defined in the binding - it’s the only way that OH allows this to be done.

Looking at the official documentation for other Smart Home platforms, I am guessing the device is reporting additional command classes besides the ones defined in the database.

In Hubitat, for example, they want you to add this custom code for the device to work properly:
HubitatPublic/basicZWaveTool.groovy at master · hubitat/HubitatPublic · GitHub

[...]
List<String> getCommandClassReport(){
    List<String> cmds = []
    List<Integer> ic = getDataValue("inClusters").split(",").collect{ hexStrToUnsignedInt(it) }
    ic.each {
		if (it) cmds.add(secureCmd(zwave.versionV1.versionCommandClassGet(requestedCommandClass:it)))
    }
    return delayBetween(cmds,500)
}
[...]

This here looks interesting:
How to Access Advanced Settings for ZEN17 Universal Relay on SmartThings - Zooz Support Center (getzooz.com)

To create additional sensor devices to monitor the inputs separately from the relays , choose a sensor type (options 5-10) under Input Type for Relay 1 or Input Type for Relay 2. Exit the settings once you select the new input type and look for the new device under “No room assigned” in your app under Devices.

Since you have to predefine what type of sensor the input is monitoring, my naive assumption is I can manually add sensors for all ~10 types of inputs, and only the one configured will receive updates.
If that works, we could use it as a static config with 9 out of 10 useless/defunct sensors, depending on your configuration, but at least it’ll work for the one sensor type configured.
I’d like to try that out.

Not really - it must be defined in the binding - it’s the only way that OH allows this to be done.

So that means for me:

  • Download the binding sources
  • Find the database and make the changes to the ZEN17 device definition
  • Compile a binding package
  • Upload the package to my OH addons folder, and OH will upgrade automatically
  • Pray Zigbee doesn’t break while playing around with Z-Wave.

Does that sound about right?
Any pointers where this database is sitting in the repo?

Thanks,
Daniel

Ah, nvm the XML location, I found it:
org.openhab.binding.zwave/zen17_0_0.xml at main · openhab/org.openhab.binding.zwave (github.com)

There’s no need to guess what it is reporting. The binding does an interview of the device and saves all the information required to define the channels in an XML file (it’s in the userdata/zwave folder - in another folder named after the controller, and then a file named after the node).

This XML file lists all the command classes etc and can be used to generate the database.

The database is here -:

https://opensmarthouse.org/zwavedatabase/

Possibly the best approach is for me to remove the current entry and you can create a new entry using your /XML.

I’ll play around with it tomorrow/later and see what I can find!

1 Like

A couple of findings:
The device reports different command classes depending on the configuration:
image

You’ll have to exclude and re-add the device for the command classes to get the XML to change.
Not sure if that’s a limitation of OpenHab or the device, but not important.

I am attaching three XML files for various settings.
As you can see, when the input is configured as a “toggle switch” (value 1), it does not report a sensor command (COMMAND_CLASS_SENSOR_BINARY is missing):

When configured as “open/close alert” (value 7) or “on/off report” (value 10), it is reporting COMMAND_CLASS_SENSOR_BINARY.

I will now try to modify the local XML in my local clone and see if I can hardcode the command class.
I am assuming, when the command class is defined in the XML but not actually reported on the device, nothing bad is going to happen at runtime(?).

Thanks,
Daniel

Attachments:
1 toggle switch after exclusion.xml (22.0 KB)
1 toggle switch.xml (26.1 KB)
7 door sensor.xml (26.1 KB)
10 dry contact.xml (26.1 KB)

It’s a limitation of ZWave. It’s not possible for a device to change command classes once included as the system assumes it is static. This is also why things like changing power (eg from battery to USB) also required reinclusion.

I’d suggest we create a new device with the maximum configuration (whatever that ends up being). We can’t support different thing types depending on the device configuration.

Success!!!

Adding these lines in the zen17_0_0.xml worked:

    <!-- CHANNEL DEFINITIONS -->
    <channels>
      <channel id="switch_binary1" typeId="switch_binary">
        <label>Switch 1</label>
        <properties>
          <property name="binding:*:OnOffType">COMMAND_CLASS_SWITCH_BINARY:1</property>
        </properties>
      </channel>
      <channel id="switch_binary2" typeId="switch_binary">
        <label>Switch 2</label>
        <properties>
          <property name="binding:*:OnOffType">COMMAND_CLASS_SWITCH_BINARY:2</property>
        </properties>
      </channel>
+      <channel id="sensor_binary1" typeId="sensor_binary">
+        <label>Sensor 1</label>
+        <properties>
+          <property name="binding:*:OnOffType">COMMAND_CLASS_SENSOR_BINARY:1</property>
+        </properties>
+      </channel>
+      <channel id="sensor_binary2" typeId="sensor_binary">
+        <label>Sensor 2</label>
+        <properties>
+          <property name="binding:*:OnOffType">COMMAND_CLASS_SENSOR_BINARY:2</property>
+        </properties>
+      </channel>
+    </channels>

Now I have two switches and two sensors and they work independently, i.e. the sensors are reporting the input and the switches report/control the output relays:

I didn’t even have to compile the zwave bundle. I simply downloaded the 3.2.0 release jar, modified the XML inside, and uploaded it into the addons folder.
OH did the right thing and reload the modified package.

One big question:
What would you consider the “maximum configuration” for all sensor types?
I haven’t tried out all 6 possible configurations, but the few I tried only seem to differ in terms of sensor type:

And maybe alarm configuration (have to double check):

Do these differences have any notable implications for OH, or can we ignore them and only add the two sensor command classes so people can independently query the sensors and control the relays?

Thanks,
Daniel

PS: The (only?) difference between sensor type 4 (leak alarm) and type 7 (open/close alert) is that the former is NO (normally open), i.e. ON represents a closed circuit and the latter is NC (normally closed), where ON means the circuit is open,but it does not change anything on the OH side, only how the device reports the sensor. (Hope I got NO and NC right, but you get the gist…)

@chris , the Zen17 device disappeared from the database…?

Yes, as I said above, the best option was to delete the existing entry and create a new one with the new XML.

I’m not sure - we want to try and provide channels that expose most of the features of the device. If we miss some, then we can have a discussion when/if someone finds themselves wanting the additional functionality.

Alternatively, we just add the channels that you use, and ensure that the ones that were there originally are still there.

Ah, didn’t catch that you were going to do that.

If you’re adding back the entry, consider using the file I attached (7 doorsensor.xml). It should expose the 4 channels (2 switches and 2 sensors marked as ALARM and sensor type DOORWINDOW), which should be good enough for now.

I’d gladly test this end to end (need instructions though, because I’m not sure how the DB from OpenSmartHouse gets into the package sources for OH.).