Z-wave device Heatit Z-Smoke not in database; link to cd-jackson.com gives file not found

Dear all,

I have a z-wave smoke detector from Heatit which is apparently not in the database:
https://www.heatit.com/z-wave/heatit-z-smoke-ac/

I tried following forum posts to get the device added to the database which led me here:
https://github.com/openhab/org.openhab.binding.zwave/blob/master/doc/things.md

However, the link to the “database information page” at the very bottom ends in a “File not found.” on cd-jackson.com

Would anyone be so kind to point me in the right direction to get the device added?

Many thanks in advance.

Elgin

The binding collected this information about the device:

<node>
  <homeId>0xef2d1fbc</homeId>
  <nodeId>51</nodeId>
  <version>4</version>
  <manufacturer>0x19b</manufacturer>
  <deviceId>0xd</deviceId>
  <deviceType>0x3</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_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_BATTERY</commandClass>
    <commandClass>COMMAND_CLASS_ALARM</commandClass>
    <commandClass>COMMAND_CLASS_SENSOR_MULTILEVEL</commandClass>
    <commandClass>COMMAND_CLASS_SECURITY_2</commandClass>
    <commandClass>COMMAND_CLASS_SUPERVISION</commandClass>
    <commandClass>COMMAND_CLASS_FIRMWARE_UPDATE_MD</commandClass>
  </nodeInformationFrame>
  <associationGroups class="concurrent-hash-map">
    <entry>
      <int>1</int>
      <associationGroup>
        <index>1</index>
        <maxNodes>0</maxNodes>
        <associations/>
      </associationGroup>
    </entry>
    <entry>
      <int>2</int>
      <associationGroup>
        <index>2</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_SENSOR_NOTIFICATION</genericDeviceClass>
          <specificDeviceClass>SPECIFIC_TYPE_NOTIFICATION_SENSOR</specificDeviceClass>
        </deviceClass>
        <endpointId>0</endpointId>
        <secureCommandClasses/>
        <supportedCommandClasses class="concurrent-hash-map">
          <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_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_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_MANUFACTURER_SPECIFIC</commandClass>
            <COMMAND__CLASS__MANUFACTURER__SPECIFIC>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <initSerialNumber>false</initSerialNumber>
              <deviceManufacturer>411</deviceManufacturer>
              <deviceType>3</deviceType>
              <deviceId>13</deviceId>
            </COMMAND__CLASS__MANUFACTURER__SPECIFIC>
          </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>6.4</protocolVersion>
              <applicationVersion>4.1</applicationVersion>
              <hardwareVersion>255</hardwareVersion>
            </COMMAND__CLASS__VERSION>
          </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_ALARM</commandClass>
            <COMMAND__CLASS__ALARM>
              <version>8</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>8</versionSupported>
              <alarms>
                <entry>
                  <alarmType>SMOKE</alarmType>
                  <alarmState>
                    <alarmType>SMOKE</alarmType>
                    <reportedEvents/>
                    <outer-class reference="../../../.."/>
                  </alarmState>
                </entry>
                <entry>
                  <alarmType>HEAT</alarmType>
                  <alarmState>
                    <alarmType>HEAT</alarmType>
                    <reportedEvents/>
                    <outer-class reference="../../../.."/>
                  </alarmState>
                </entry>
                <entry>
                  <alarmType>BURGLAR</alarmType>
                  <alarmState>
                    <alarmType>BURGLAR</alarmType>
                    <reportedEvents/>
                    <outer-class reference="../../../.."/>
                  </alarmState>
                </entry>
                <entry>
                  <alarmType>POWER_MANAGEMENT</alarmType>
                  <alarmState>
                    <alarmType>POWER_MANAGEMENT</alarmType>
                    <reportedEvents/>
                    <outer-class reference="../../../.."/>
                  </alarmState>
                </entry>
              </alarms>
              <v1Supported>true</v1Supported>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__ALARM>
          </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_FIRMWARE_UPDATE_MD</commandClass>
            <COMMAND__CLASS__FIRMWARE__UPDATE__MD>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>4</versionSupported>
            </COMMAND__CLASS__FIRMWARE__UPDATE__MD>
          </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_BATTERY</commandClass>
            <COMMAND__CLASS__BATTERY>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
              <batteryLevel>60</batteryLevel>
              <batteryLow>false</batteryLow>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__BATTERY>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_SENSOR_MULTILEVEL</commandClass>
            <COMMAND__CLASS__SENSOR__MULTILEVEL>
              <version>10</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>11</versionSupported>
              <sensors>
                <entry>
                  <multilevelSensorType>TEMPERATURE</multilevelSensorType>
                  <multilevelSensor>
                    <sensorType>TEMPERATURE</sensorType>
                    <initialised>true</initialised>
                  </multilevelSensor>
                </entry>
              </sensors>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__SENSOR__MULTILEVEL>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION</commandClass>
            <COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
              <version>3</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>3</versionSupported>
              <maxGroups>2</maxGroups>
            </COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
          </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/>
            </COMMAND__CLASS__ASSOCIATION__GRP__INFO>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ASSOCIATION</commandClass>
            <COMMAND__CLASS__ASSOCIATION>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <maxGroups>2</maxGroups>
            </COMMAND__CLASS__ASSOCIATION>
          </entry>
        </supportedCommandClasses>
      </endPoint>
    </entry>
  </endpoints>
  <nodeNeighbors/>
  <lastReceived>2021-01-12 17:34:40.653 UTC</lastReceived>
</node>

Hi, I just got two of these Z-smoke devices, and couldn’t get the motion and tamper channels working.
Looking at the log, motion seems to be comming in as event 8 and tamper as event 3, which is also what is described in the product manual: https://media.heatit.com/709

Example of motion trigger in z-wave log:

2021-07-22 21:18:00.329 [DEBUG] [ng.zwave.internal.protocol.ZWaveNode] - NODE 6: Incoming command class COMMAND_CLASS_ALARM, endpoint 0
2021-07-22 21:18:00.329 [DEBUG] [tocol.commandclass.ZWaveCommandClass] - NODE 6: Received COMMAND_CLASS_ALARM V8 NOTIFICATION_REPORT
2021-07-22 21:18:00.329 [DEBUG] [.commandclass.ZWaveAlarmCommandClass] - NODE 6: NOTIFICATION report - 0 = 0, event=8, status=255, plen=0
2021-07-22 21:18:00.329 [DEBUG] [.commandclass.ZWaveAlarmCommandClass] - NODE 6: Alarm Type = BURGLAR (0)
2021-07-22 21:18:00.329 [TRACE] [ve.internal.protocol.ZWaveController] - Notifying event listeners: ZWaveAlarmValueEvent
2021-07-22 21:18:00.329 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 6: Got an event from Z-Wave network: ZWaveAlarmValueEvent
2021-07-22 21:18:00.329 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 6: Got a value event from Z-Wave network, endpoint=0, command class=COMMAND_CLASS_ALARM, value=255
2021-07-22 21:18:00.329 [TRACE] [ding.zwave.handler.ZWaveThingHandler] - NODE 6: Checking channel=zwave:device:4a831a5616:node6:switch_binary, cmdClass=COMMAND_CLASS_SWITCH_BINARY, endpoint=0
2021-07-22 21:18:00.329 [TRACE] [ding.zwave.handler.ZWaveThingHandler] - NODE 6: Checking channel=zwave:device:4a831a5616:node6:sensor_temperature, cmdClass=COMMAND_CLASS_SENSOR_MULTILEVEL, endpoint=0
2021-07-22 21:18:00.329 [TRACE] [ding.zwave.handler.ZWaveThingHandler] - NODE 6: Checking channel=zwave:device:4a831a5616:node6:alarm_smoke, cmdClass=COMMAND_CLASS_ALARM, endpoint=0
2021-07-22 21:18:00.330 [DEBUG] [ternal.converter.ZWaveAlarmConverter] - NODE 6: Alarm converter processing NOTIFICATION
2021-07-22 21:18:00.330 [DEBUG] [ternal.converter.ZWaveAlarmConverter] - NODE 6: Alarm converter NOTIFICATION event is 8, type OnOffType
2021-07-22 21:18:00.330 [TRACE] [ding.zwave.handler.ZWaveThingHandler] - NODE 6: Checking channel=zwave:device:4a831a5616:node6:alarm_heat, cmdClass=COMMAND_CLASS_ALARM, endpoint=0
2021-07-22 21:18:00.330 [DEBUG] [ternal.converter.ZWaveAlarmConverter] - NODE 6: Alarm converter processing NOTIFICATION
2021-07-22 21:18:00.330 [DEBUG] [ternal.converter.ZWaveAlarmConverter] - NODE 6: Alarm converter NOTIFICATION event is 8, type OnOffType
2021-07-22 21:18:00.330 [TRACE] [ding.zwave.handler.ZWaveThingHandler] - NODE 6: Checking channel=zwave:device:4a831a5616:node6:alarm_burglar, cmdClass=COMMAND_CLASS_ALARM, endpoint=0
2021-07-22 21:18:00.330 [DEBUG] [ternal.converter.ZWaveAlarmConverter] - NODE 6: Alarm converter processing NOTIFICATION
2021-07-22 21:18:00.330 [DEBUG] [ternal.converter.ZWaveAlarmConverter] - NODE 6: Alarm converter NOTIFICATION event is 8, type OnOffType
2021-07-22 21:18:00.330 [TRACE] [ding.zwave.handler.ZWaveThingHandler] - NODE 6: Checking channel=zwave:device:4a831a5616:node6:alarm_power, cmdClass=COMMAND_CLASS_ALARM, endpoint=0
2021-07-22 21:18:00.330 [DEBUG] [ternal.converter.ZWaveAlarmConverter] - NODE 6: Alarm converter processing NOTIFICATION
2021-07-22 21:18:00.330 [DEBUG] [ternal.converter.ZWaveAlarmConverter] - NODE 6: Alarm converter NOTIFICATION event is 8, type OnOffType
2021-07-22 21:18:00.330 [TRACE] [ding.zwave.handler.ZWaveThingHandler] - NODE 6: Checking channel=zwave:device:4a831a5616:node6:battery-level, cmdClass=COMMAND_CLASS_BATTERY, endpoint=0
2021-07-22 21:18:00.331 [DEBUG] [nal.protocol.ZWaveTransactionManager] - NODE 6: Commands processed 1.

With inspiration from other things in the z-wave binding, I changed this channel directly in the file:
(src\main\resources\OH-INF\thing\thermofloor\Zsmoke_0_0.xml)

      <channel id="alarm_burglar" typeId="alarm_burglar">
        <label>Alarm (burglar)</label>
        <properties>
          <property name="binding:*:OnOffType">COMMAND_CLASS_ALARM;type=BURGLAR</property>
        </properties>
      </channel>

into two channels with events:

      <channel id="alarm_motion" typeId="alarm_motion">
        <label>Alarm (motion)</label>
        <properties>
          <property name="binding:*:OnOffType">COMMAND_CLASS_ALARM;type=BURGLAR,event=8</property>
        </properties>
      </channel>
	  <channel id="alarm_tamper" typeId="alarm_tamper">
        <label>Alarm (tamper)</label>
        <properties>
          <property name="binding:*:OnOffType">COMMAND_CLASS_ALARM;type=BURGLAR,event=3</property>
        </properties>
      </channel>

I compiled it and tested it in my openHAB, and motion and tamper now works.
Now the question is, what is the correct way to add this simple change to the database?

Also, I do not fully understand how events work, but the product manual describes events on the other alarms as well. I haven’t been able to test Smoke and Heat, but to me it looks like they come in as event 6 and 2?
Then again, Power Management seems to work, even though it says event 2 and 3…
image

Read & follow the database guide posted by Chris. This i sa community maintained database.

Thanks @Bruce_Osborne for your very helpful answer :wink:
I just read the guide AGAIN, and it’s still not clear what setting in the database sets the event ID on the channel property. Bitmasks perhaps?

Nevertheless, I went along and created a login and requested access to update the item. Maybe I’ll be able to guess it based on other items…

After talking to Chris, it is now clear that it is the channels typeID that handles the different events, thank you Chris for clarifying.

For instance, alarm_motion is set to trigger on type=BURGLAR events 7 and 8, so the solution is simply to replace the alarm_burglar channel, with an alarm_motion and alarm_tamper in the database. and it should work for this product.