Aeotec TriSensor

I’m starting this thread to track adding this device to the database, plus any early problems/questions that might come up.

cc @chris, who offered to help add support.

Can you provide the XML that OH creates for the device - it will be in the userdata/zwave folder. I want to check a few things with this.

I tried creating the device from the definition on the ZWA site, but it seems to use a different manufacturer ID than Aeons standard…

I’ve created the basic entry by importing the data from the ZWA database. It needs some TLC - manual upload, image, and some shortening of descriptions.

https://www.cd-jackson.com/index.php/zwave/zwave-device-database/zwave-device-list/devicesummary/921

I’ve given you access to edit the database, so maybe you can have a look at sorting some of this out? :slight_smile:

I’ll also need the XML to finish the database as this is used to generate all the OH specific data.

Sure thing. I don’t seem to be allowed to add it as an attachment, so here it is inline:

<node>
  <homeId>0xd208330a</homeId>
  <nodeId>8</nodeId>
  <version>4</version>
  <manufacturer>0x371</manufacturer>
  <deviceId>0x5</deviceId>
  <deviceType>0x102</deviceType>
  <listening>false</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_SECURITY</commandClass>
    <commandClass>COMMAND_CLASS_SECURITY_2</commandClass>
    <commandClass>COMMAND_CLASS_TRANSPORT_SERVICE</commandClass>
    <commandClass>COMMAND_CLASS_VERSION</commandClass>
    <commandClass>COMMAND_CLASS_POWERLEVEL</commandClass>
    <commandClass>COMMAND_CLASS_ASSOCIATION</commandClass>
    <commandClass>COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION</commandClass>
    <commandClass>COMMAND_CLASS_ASSOCIATION_GRP_INFO</commandClass>
    <commandClass>COMMAND_CLASS_MANUFACTURER_SPECIFIC</commandClass>
    <commandClass>COMMAND_CLASS_DEVICE_RESET_LOCALLY</commandClass>
    <commandClass>COMMAND_CLASS_BATTERY</commandClass>
    <commandClass>COMMAND_CLASS_WAKE_UP</commandClass>
    <commandClass>COMMAND_CLASS_SENSOR_BINARY</commandClass>
    <commandClass>COMMAND_CLASS_ALARM</commandClass>
    <commandClass>COMMAND_CLASS_SENSOR_MULTILEVEL</commandClass>
    <commandClass>COMMAND_CLASS_CONFIGURATION</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>
    <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_SENSOR_NOTIFICATION</genericDeviceClass>
          <specificDeviceClass>SPECIFIC_TYPE_NOTIFICATION_SENSOR</specificDeviceClass>
        </deviceClass>
        <endpointId>0</endpointId>
        <secureCommandClasses/>
        <supportedCommandClasses class="concurrent-hash-map">
          <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>881</deviceManufacturer>
              <deviceType>258</deviceType>
              <deviceId>5</deviceId>
            </COMMAND__CLASS__MANUFACTURER__SPECIFIC>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_SENSOR_MULTILEVEL</commandClass>
            <COMMAND__CLASS__SENSOR__MULTILEVEL>
              <version>7</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>7</versionSupported>
              <sensors>
                <entry>
                  <multilevelSensorType>TEMPERATURE</multilevelSensorType>
                  <multilevelSensor>
                    <sensorType>TEMPERATURE</sensorType>
                    <initialised>true</initialised>
                  </multilevelSensor>
                </entry>
                <entry>
                  <multilevelSensorType>LUMINANCE</multilevelSensorType>
                  <multilevelSensor>
                    <sensorType>LUMINANCE</sensorType>
                    <initialised>true</initialised>
                  </multilevelSensor>
                </entry>
              </sensors>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__SENSOR__MULTILEVEL>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_CONFIGURATION</commandClass>
            <COMMAND__CLASS__CONFIGURATION>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
              <configParameters/>
            </COMMAND__CLASS__CONFIGURATION>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION</commandClass>
            <COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
              <version>3</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>3</versionSupported>
              <maxGroups>3</maxGroups>
            </COMMAND__CLASS__MULTI__CHANNEL__ASSOCIATION>
          </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_BATTERY</commandClass>
            <COMMAND__CLASS__BATTERY>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
              <batteryLevel>100</batteryLevel>
              <batteryLow>false</batteryLow>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__BATTERY>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_VERSION</commandClass>
            <COMMAND__CLASS__VERSION>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <libraryType>LIB_SLAVE_ENHANCED</libraryType>
              <protocolVersion>4.61</protocolVersion>
              <applicationVersion>2.9</applicationVersion>
              <hardwareVersion>17</hardwareVersion>
            </COMMAND__CLASS__VERSION>
          </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_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_ALARM</commandClass>
            <COMMAND__CLASS__ALARM>
              <version>8</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>8</versionSupported>
              <alarms>
                <entry>
                  <alarmType>BURGLAR</alarmType>
                  <alarmState>
                    <alarmType>BURGLAR</alarmType>
                    <reportedEvents/>
                    <outer-class reference="../../../.."/>
                  </alarmState>
                </entry>
              </alarms>
              <v1Supported>true</v1Supported>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__ALARM>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_WAKE_UP</commandClass>
            <COMMAND__CLASS__WAKE__UP>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <targetNodeId>1</targetNodeId>
              <interval>28800</interval>
              <minInterval>1800</minInterval>
              <maxInterval>64800</maxInterval>
              <defaultInterval>28800</defaultInterval>
              <intervalStep>60</intervalStep>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__WAKE__UP>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_SECURITY</commandClass>
            <COMMAND__CLASS__SECURITY>
              <version>1</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>1</versionSupported>
            </COMMAND__CLASS__SECURITY>
          </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_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_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_SLEEPING_REPORTING</zwPlusRole>
              <zwPlusNodeType>NODE_TYPE_ZWAVEPLUS_NODE</zwPlusNodeType>
              <isGetSupported>true</isGetSupported>
            </COMMAND__CLASS__ZWAVEPLUS__INFO>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_ASSOCIATION</commandClass>
            <COMMAND__CLASS__ASSOCIATION>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <maxGroups>3</maxGroups>
            </COMMAND__CLASS__ASSOCIATION>
          </entry>
          <entry>
            <commandClass>COMMAND_CLASS_SENSOR_BINARY</commandClass>
            <COMMAND__CLASS__SENSOR__BINARY>
              <version>2</version>
              <instances>1</instances>
              <control>false</control>
              <versionSupported>2</versionSupported>
              <isGetSupported>true</isGetSupported>
              <types>
                <binarySensorType>MOTION</binarySensorType>
              </types>
            </COMMAND__CLASS__SENSOR__BINARY>
          </entry>
        </supportedCommandClasses>
      </endPoint>
    </entry>
  </endpoints>
  <nodeNeighbors/>
  <lastReceived>2018-10-28 19:30:20.184 UTC</lastReceived>
</node>

FWIW, I uploaded my XML to the database and got this message:

SELECT * FROM `joo_zwave_devices` WHERE `type_id` LIKE '%0102:0005%' AND `manufacturer` LIKE '690' AND ((`versionmin`&lt;=2.009 OR `versionmin`=0) and (`versionmax`&gt;=2.009 OR `versionmax`=255.255))

Thanks. I’ve loaded the XML and the database is pretty much complete - it just needs all the red errors removing. This is mostly a case of loading the manual and image, and sorting out the parameter labels.

It’s simple stuff if not a little mind-numbing. Can you look at that and we can get it added to the binding tomorrow hopefully?

Yep - I’d already loaded it :slight_smile: .

I notice that at least one parameter (2 - Motion Clear Time) has a defined option but looks like it’s really just a free number of seconds. Is there a way to delete the option? I can’t find it in the UI.

There is, but it’s not available to “normal” users. Just mark anything you want deleted with DELETE ME - or something similar and I’ll remove it before approving.

Thanks.

Take a look; I just did some editing and think the parameters are in a reasonable state now. There are a number of options to be deleted (labeled DELETE). For the most part I left the language as-is, but I did edit for clarity in a few spots.

All of the remaining errors are missing descriptions. I didn’t enter descriptions for fields where the label is self-explanatory and any further detail is intricate enough that it needs to be in the overview. Let me know if something should go in those description fields, but I can’t think of what.

FWIW, it’d be awesome if it could be added today, or if you can give me a way to import this config into my own instance of OH2.

We need to clear these errors - without this I can’t approve (ie it’s blocked). If there’s only an overview, then I’d suggest to move it to the description. Or if it’s too long for the description, then just put the first sentence in the description (description should be a single line).

If you can sort this in the next hour or two, I’ll try and get this merged tonight.

I’ll do this now, but like I mentioned in my last message, I don’t know if most of these have meaningful descriptions. For example, what would be good descriptions for the “Motion Sensitivity” and “LED Color For Motion Event Report” fields?

I added descriptions. The only message left is:

  • There are 3 association groups but none are linked to the controller. Is this correct?

…and I’m not sure what that means, so I’ll leave it to you.

Ok, that’s fine. Thanks. I’ll have a look…

All done. I’ve started the build and with luck it should be all done within the hour.

Sweet! What’s the easiest way for me to try it?

I think the XML above was incomplete — maybe the device hadn’t been fully interrogated :grimacing:?

I ended up with a larger one shortly after and tried to re-upload it by choosing “update device” in the DB, but just got errors about it already existing. Is there a way to merge in the new XML? It’s worth noting that it turns out that the association groups have names that are different/more specific than the ones I entered. Where the XML specifies a name or label, it should probably supersede my edits.

network_d208330a__node_8.xml (20.2 KB)

EDIT: Since I have “reached the limit” of replies I can create as a new user…

I also managed to build and install the binding from source, and I’m having trouble getting notified about motion events. I see them in the log if I set the binding to DEBUG, but they don’t seem to map to any channel. I can pull logs tomorrow, but right now I’m worried that it has to do with the incomplete seed XML.

I don’t think it will make any difference. It looked fine, and it created the channels. I think the only difference is that your new XML now contains the configuration data, and it contains this because it got it from the database. The core data that the system uses to create the database looks the same, and the channels it’s created look correct I think.

Yes, the binding will download names from the device, but these are short and I would not expect them to be used. In any case, the names of the groups will make no difference to the operation of the device as the binding doesn’t use the names for anything.

Why did you need to build the binding yourself? Did the build not work? (I thought it completed ok).