New zwave device TKB TZ76

I need help with describing TZ76 functionality in xml.

The device doesn’t exists in the DB so I’d like to create xml for it. Currently zwave binding is recognizing it as TZ66D.

Node.xml

  <version>4</version>
  <manufacturer>0x118</manufacturer>
  <deviceId>0x1020</deviceId>
  <deviceType>0x102</deviceType>

In general that’s fine but some of its functionalities are missing.

tz76

There is just one channel defined for tz66d so the additional two switches cannot be associated to other zwave device.

    <!-- CHANNEL DEFINITIONS -->
    <channels>
      <channel id="switch_binary" typeId="switch_binary">
        <label>Switch</label>
        <properties>
          <property name="binding:*:OnOffType">SWITCH_BINARY,BASIC</property>
        </properties>
      </channel>
    </channels>

The rest of the tkb_tz66d_0_0.xml seems OK, except the fact that no DB record for TZ76 exists.
So my question is how to add K2 and K3 to the Channel definition?

You can read up on how to add a device to the database here.

Once you get an account, you can upload the node.xml file, as well as enter other features of the device (such as config parameters).

@mhilbush thanks, I’ve requested a db access.

However my question is still valid but I can ask differently: is there a place where I can read how to write a device xml properly as I’d like to avoid doing it wrongly?

In the above example the device has 3 input switches but only 1 load relay so I’m not really sure how to describe K1, K2, K3 channels.

TZ76 is also a good example of a device which is different than the binding discovery. Its auto generated node xml has the following Type:id:

  <deviceId>0x1020</deviceId>
  <deviceType>0x102</deviceType>

while there is the same Type:Id for other device TZ66D

<property name="manufacturerRef">0102:1020</property>

Hints are much appreciated :slight_smile:

Not that I’m aware (other than reading the code itself). Sorry.

I’m not sure what to suggest for the duplicate Type:Id issue.

The format of the XML is in the ESH documentation, but it doesn’t document the ZWave specific stuff. I prefer to avoid editing these files manually - it’s better to edit the database directly as we can then directly export the different file versions used in the different bindings (currently there are 3 different versions of these files!).

The number of loads etc is normally irrelevant - the device will expose a number of command classes and we can “attach” channels to these command classes. Normally, if you upload the XML file that OH creates automatically to the database, it will create these channels linked to the functionality the device provides. If there’s no load, then it doesn’t really matter - it’s still just a switch…

I hope this helps and I hope I’ve understood correctly your issue :wink: .

Hi Chris,

@chris
Seems that the issue I’ve descried above requires your attention because of a an existing DB record with the same Type:id:

<deviceId>0x1020</deviceId>
<deviceType>0x102</deviceType> 

I tried to create a new device record for TZ76 but I received the below Warning:
Warning
Device with these IDs is already in the database as TKB Home, TZ66D and endpoints are already defined.

Cheers
Dimitar

Hi
In this case the device is already in the database. Are you using the latest snapshot?

The other option is the device ids have been added to another device that is the same or almost the same. The database should direct you to this when you upload the xml.

Both devices are different.

TZ66D exists since OH1.x in the database. It’s also available in the OH2 binding.

TZ66D

Anyway TZ76 looks as follow:

tz76

Maybe your guess “the device ids have been added to another device” is valid but I’m not 100% sure as I cannot check TZ66D. Or maybe there are 2 different devices with the same IDs.

@chris what do you think?

Updating an existing (TZ66D) device with additional data (for TZ76) may cause the first one to stop operate normally.
How do you usually decide on such situations?

Cheers
Dimitar

Your device IDs are definately in the database against the TZ66. From what I can tell, the TZ66 has multiple channels (your wiring diagram isn’t really relevant to the logical operation of the device I guess).

I don’t see a manual for the TZ66, but it looks like @marcel_verpaalen uploaded the original database entry so maybe he can comment to at least confirm how this device operates.

Maybe someone can also upload the TZ66 manual to the database so we can compare it with the TZ76.

If the manufacturer has used the same device IDs for multiple devices, then that’s a problem - it’s not allowed for Z-Wave certification, so they shouldn’t have done this (although that doesn’t mean they didn’t as we do see this occasionally). We can see if the firmware versions are the same - if not we can use this to differentiate the devices. If everything is the same, then the job gets harder :frowning:

@chris
I found this manual at the shop i bought the device

@chris I found and loaded the dedicated manual for this switch in your db

Thanks @marcel_verpaalen. Can you also post an XML for one of these when you get a chance (ie attach it to this thread).

@d_valchev can you also post an XML for the TZ76 so I can see what the two devices look like?

<node>
  <deviceClass>
    <basicDeviceClass>ROUTING_SLAVE</basicDeviceClass>
    <genericDeviceClass>BINARY_SWITCH</genericDeviceClass>
    <specificDeviceClass>POWER_SWITCH_BINARY</specificDeviceClass>
  </deviceClass>
  <homeId>0x184d666</homeId>
  <nodeId>7</nodeId>
  <version>4</version>
  <manufacturer>0x118</manufacturer>
  <deviceId>0x1020</deviceId>
  <deviceType>0x102</deviceType>
  <listening>true</listening>
  <frequentlyListening>false</frequentlyListening>
  <routing>true</routing>
  <security>false</security>
  <beaming>true</beaming>
  <maxBaudRate>40000</maxBaudRate>
  <nodeInformationFrame>
    <commandClass>SWITCH_BINARY</commandClass>
    <commandClass>ASSOCIATION</commandClass>
    <commandClass>SWITCH_ALL</commandClass>
    <commandClass>CONFIGURATION</commandClass>
    <commandClass>POWERLEVEL</commandClass>
    <commandClass>VERSION</commandClass>
    <commandClass>MANUFACTURER_SPECIFIC</commandClass>
  </nodeInformationFrame>
  <supportedCommandClasses>
    <entry>
      <commandClass>SWITCH_BINARY</commandClass>
      <binarySwitchCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <isGetSupported>true</isGetSupported>
      </binarySwitchCommandClass>
    </entry>
    <entry>
      <commandClass>NO_OPERATION</commandClass>
      <noOperationCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
      </noOperationCommandClass>
    </entry>
    <entry>
      <commandClass>VERSION</commandClass>
      <versionCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <libraryType>LIB_SLAVE_ROUTING</libraryType>
        <protocolVersion>2.97</protocolVersion>
        <applicationVersion>1.3</applicationVersion>
      </versionCommandClass>
    </entry>
    <entry>
      <commandClass>SWITCH_ALL</commandClass>
      <switchAllCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <isGetSupported>true</isGetSupported>
        <mode>SWITCH_ALL_INCLUDE_ON_OFF</mode>
      </switchAllCommandClass>
    </entry>
    <entry>
      <commandClass>MANUFACTURER_SPECIFIC</commandClass>
      <manufacturerSpecificCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <initSerialNumber>false</initSerialNumber>
        <deviceManufacturer>280</deviceManufacturer>
        <deviceType>258</deviceType>
        <deviceId>4128</deviceId>
      </manufacturerSpecificCommandClass>
    </entry>
    <entry>
      <commandClass>BASIC</commandClass>
      <basicCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <isGetSupported>true</isGetSupported>
      </basicCommandClass>
    </entry>
    <entry>
      <commandClass>ASSOCIATION</commandClass>
      <associationCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <maxGroups>4</maxGroups>
      </associationCommandClass>
    </entry>
    <entry>
      <commandClass>CONFIGURATION</commandClass>
      <configurationCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <configParameters>
          <entry>
            <int>1</int>
            <configurationParameter>
              <index>1</index>
              <size>1</size>
              <value>1</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>2</int>
            <configurationParameter>
              <index>2</index>
              <size>1</size>
              <value>0</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>3</int>
            <configurationParameter>
              <index>3</index>
              <size>1</size>
              <value>1</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>19</int>
            <configurationParameter>
              <index>19</index>
              <size>1</size>
              <value>0</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>4</int>
            <configurationParameter>
              <index>4</index>
              <size>1</size>
              <value>0</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>20</int>
            <configurationParameter>
              <index>20</index>
              <size>1</size>
              <value>1</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>22</int>
            <configurationParameter>
              <index>22</index>
              <size>1</size>
              <value>1</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>14</int>
            <configurationParameter>
              <index>14</index>
              <size>1</size>
              <value>1</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>
        </configParameters>
      </configurationCommandClass>
    </entry>
    <entry>
      <commandClass>POWERLEVEL</commandClass>
      <powerLevelCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <powerLevel>0</powerLevel>
        <powerTimeout>0</powerTimeout>
      </powerLevelCommandClass>
    </entry>
  </supportedCommandClasses>
  <securedCommandClasses/>
  <associationGroups>
    <entry>
      <int>1</int>
      <associationGroup>
        <index>1</index>
        <associations>
          <associationMember>
            <node>1</node>
            <endpoint>0</endpoint>
          </associationMember>
        </associations>
      </associationGroup>
    </entry>
    <entry>
      <int>2</int>
      <associationGroup>
        <index>2</index>
        <associations>
          <associationMember>
            <node>2</node>
            <endpoint>0</endpoint>
          </associationMember>
          <associationMember>
            <node>1</node>
            <endpoint>0</endpoint>
          </associationMember>
        </associations>
      </associationGroup>
    </entry>
    <entry>
      <int>3</int>
      <associationGroup>
        <index>3</index>
        <associations>
          <associationMember>
            <node>1</node>
            <endpoint>0</endpoint>
          </associationMember>
        </associations>
      </associationGroup>
    </entry>
    <entry>
      <int>4</int>
      <associationGroup>
        <index>4</index>
        <associations>
          <associationMember>
            <node>1</node>
            <endpoint>0</endpoint>
          </associationMember>
        </associations>
      </associationGroup>
    </entry>
  </associationGroups>
  <nodeNeighbors>
    <int>2</int>
    <int>3</int>
    <int>4</int>
    <int>5</int>
    <int>6</int>
    <int>9</int>
  </nodeNeighbors>
  <lastSent>2017-12-19 18:12:26.236 UTC</lastSent>
  <lastReceived>2017-12-19 18:12:26.360 UTC</lastReceived>
</node>