Z-Wave Interpretation Questions

Posted on
Wed Nov 04, 2020 9:17 am
autolog offline
Posts: 3506
Joined: Sep 10, 2013
Location: West Sussex, UK [GMT aka UTC]

Z-Wave Interpretation Questions

As part of improving my TRV plugin, I have embarked on an ambitious (for me!) side-project to develop a separate plugin to interpret (in a user friendly manner), incoming and outgoing Z-Wave commands.
I am using the Silicon Labs documentation to do this.

Example output includes:
Code: Select all
2020-11-04 RCVD: '[1, 24, 0, 4, 0, 4, 18, 50, 2, 33, 100, 0, 50, 208, 95, 2, 26, 0, 50, 208, 57, 0, 0, 0, 0, 254]' from 'Power - APC 1500 UPS - Indigo iMac etc'
at 08:23:57.933  Z-Wave Command 'Report' not yet supported for Z-Wave Command Class 'Meter'

2020-11-04 SENT: '[1, 9, 0, 19, 119, 2, 49, 4, 37, 232, 104]' to 'T06 - Cloakroom - Spirit Thermostat'
at 08:36:54.847  Class: 'Multilevel Sensor', Command: 'Get'

2020-11-04 RCVD: '[1, 12, 0, 4, 0, 119, 6, 49, 5, 1, 66, 5, 191, 75]' from 'T06 - Cloakroom - Spirit Thermostat'
at 08:36:54.925  Class: 'Multilevel Sensor', Command: 'Report', Sensor: 'Air Temperature', Value: '14.71º C'

2020-11-04 RCVD: '[1, 9, 0, 4, 0, 86, 3, 32, 3, 0, 132]' from 'Utility Room Ceiling Light'
at 08:38:40.717  Class: 'Basic Command', Command: 'Report', value: '0' | False | 'Off'
I would like to know what the first five bytes of the command string passed back by Indigo are?

My guess is:
  1. Controlling Node
  2. Frame Length
  3. ?
  4. ?
  5. ?

Also looking to understand if you can tell the version of the command class being reported on. The Meter Command Class has five versions documented. If not, how is it determined?

In the examples above
Code: Select all
Z-Wave Command 'Report' not yet supported for Z-Wave Command Class 'Meter'
Means that the code recognises the Command Class ancd command but the logic isn't yet written to do a detailed interpretation.

If the Command Class and command aren't recognised, then the log will show e.g. :
Code: Select all
2020-11-04 RCVD: '[1, 12, 0, 4, 0, 102, 6, 67, 3, 1, 66, 2, 88, 206]' from 'T92 - Testing - Popp Thermostat'
at 08:30:03.479  Logic not yet programmed for Z-Wave Command: 'Thermostat Setpoint' and Z-Wave Command Class: 'Report'
I am developing the code based on my usage and extending it as I want to interpret more Command Classes and command.

Apart from being a standalone plugin which is a wrapper around the Z-Wave Interpreter method. This method returns a dictionary of the interpreted command so it can be embedded in any plugin that needs a detail understanding of an incoming or outgoing Indigo Z-wave message. This is how I intend to use it in my TRV plugin.

Another message that I have intercepted, has the following structure:
Code: Select all
2020-11-04 RCVD: '[1, 20, 0, 4, 0, 30, 14, 250, 3, 71, 6, 69, 167, 5, 15, 229, 211, 67, 69, 167, 15, 55]' from 'Power - Yamaha NX-N500 Speakers'
at 08:22:43.219  Logic not yet programmed for Z-Wave Command Class: '250 [0xfa]'
Command Class 250 [0xFA] doesn't exist to my knowledge. This is coming from a TZ88E power plug.

Another message, I have received is for a device not included in Indigo and as far as I can tell not in the Z-Stick [At least it isn't listed if I try and include a new Z-Wave device]:
Code: Select all
2020-11-04 RCVD: '[1, 10, 0, 4, 0, 123, 4, 70, 8, 0, 127, 191]' from '123 Unknown Indigo device'
at 08:30:13.818  Logic not yet programmed for Z-Wave Command: 'Climate Control Schedule' and Z-Wave Command Class: 'Override Report'
I am fairly certain it is a Popp Thermostat which I haven't taken the batteries out of and might have been included into my test Z-Stick that is currently disconnected.

Any guidance on the above questions would be appreciated. :)

Posted on
Wed Nov 04, 2020 1:03 pm
howartp offline
Posts: 4268
Joined: Jan 09, 2014
Location: West Yorkshire, UK

Re: Z-Wave Interpretation Questions

Great idea; I’ve fancied it myself.

I’ll look at some of your questions when I’m at my desk in maybe an hour.


Sent from my iPhone using Tapatalk Pro

Posted on
Thu Nov 05, 2020 4:33 am
howartp offline
Posts: 4268
Joined: Jan 09, 2014
Location: West Yorkshire, UK

Re: Z-Wave Interpretation Questions

Hi Jon

Any chance of you changing your plugin to output Hex instead of Decimal - all the specification documents for Zwave and most of the user manuals for Zwave devices provide their command values in Hex so it's far easier and also gives a consistent layout (command length) when comparing commands on screen.

Also, I don't know if this is part of Zwave rules or somethinig I did, but all my Zwave plugins start at byte 0 not at byte 1, so for users's cross-compatibility with my plugins it would be useful to work in zero base.

In terms of the header bytes, i've always ignored them - I did ask Matt about them years ago and realised that for my purposes (all myplugins) I can ignore them.

My very old notes say that bytes 0 and 1 indicate Capability (eg FLIRS) and Security, although I completely agree that it looks very much like Controller ID and Frame Length - though why frame length would be required here when byte 6 contains the length of the payload (up to the check frame) I don't know - possibly this comes into play when using the encapsulation class?

My same notes say that bytes 3 and 4 are the Generic and Specific device classes listed in SDS13740, which on the face of it would make sense, but if so then your UPS, Thermostat and Light would all be 0x04 Displays and your 0x13 would be a Switch_Toggle.

I have previously worked with a user in Canada who has a device - I think a door lock - that also reports a non-standard command class. Their tech support refused to talk to me though.

I'll be following this thread with interest.

Peter

Posted on
Thu Nov 05, 2020 7:21 am
autolog offline
Posts: 3506
Joined: Sep 10, 2013
Location: West Sussex, UK [GMT aka UTC]

Re: Z-Wave Interpretation Questions

Hi Peter,
Thanks for your feedback. :D

howartp wrote:
Any chance of you changing your plugin to output Hex instead of Decimal - all the specification documents for Zwave and most of the user manuals for Zwave devices provide their command values in Hex so it's far easier and also gives a consistent layout (command length) when comparing commands on screen. ...

Done :) :
Code: Select all
2020-11-05 RCVD: '[ 01 18 00 04 00 11 12 32 02 21 64 00 00 18 3E 02 58 00 00 18 3E 00 00 00 00 CF ]' from 'Power - Dyson V10'
at 12:57:54.448  Z-Wave Command 'Report' not yet supported for Z-Wave Command Class 'Meter'

2020-11-05 SENT: '[ 01 09 00 13 8F 02 31 04 25 CC B4 ]' to 'T09 - Ensuite Bathroom - Spirit Thermostat'
at 13:00:05.160  Class: 'Multilevel Sensor', Command: 'Get'

2020-11-05 RCVD: '[ 01 0C 00 04 00 8F 06 31 05 01 42 06 43 4C ]' from 'T09 - Ensuite Bathroom - Spirit Thermostat'
at 13:00:05.174  Class: 'Multilevel Sensor', Command: 'Report', Sensor: 'Air Temperature', Value: '16.03º C'

2020-11-05 RCVD: '[ 01 09 00 04 00 56 03 20 03 00 84 ]' from 'Utility Room Ceiling Light'
at 12:58:01.005  Class: 'Basic Command', Command: 'Report', value: '0' | False | 'Off'

2020-11-05 RCVD: '[ 01 0C 00 04 00 66 06 43 03 01 42 02 58 CE ]' from 'T92 - Testing - Popp Thermostat'
at 12:59:30.591  Logic not yet programmed for Z-Wave Command: 'Thermostat Setpoint' and Z-Wave Command Class: 'Report'

Hopefully this is what you were looking for? :)

When I have tidied the plugin up and added in device filtering (it logs everything at the moment!), I will upload it to a private Github account and give you access to it if you are interested. :)

Posted on
Fri Nov 06, 2020 2:14 pm
matt (support) offline
Site Admin
User avatar
Posts: 20569
Joined: Jan 27, 2003
Location: Texas

Re: Z-Wave Interpretation Questions

autolog wrote:
I am developing the code based on my usage and extending it as I want to interpret more Command Classes and command.

Apart from being a standalone plugin which is a wrapper around the Z-Wave Interpreter method. This method returns a dictionary of the interpreted command so it can be embedded in any plugin that needs a detail understanding of an incoming or outgoing Indigo Z-wave message. This is how I intend to use it in my TRV plugin.

This is a great idea!

I can help with the packet decoding. For incoming Z-Wave commands like this one:

Code: Select all
RCVD: '[ 01 18 00 04 00 11 12 32 02 21 64 00 00 18 3E 02 58 00 00 18 3E 00 00 00 00 CF ]' from 'Power - Dyson V10'
at 12:57:54.448  Z-Wave Command 'Report' not yet supported for Z-Wave Command Class 'Meter'

01: Start Marker (01 for successful incoming packets – your callback will only be called with 01)
18: Full Packet Length (from next byte to last byte which is checksum)
00: I don't recall the specifics on this one, but it will always be 00
04: This is the packet type sent by the controller for incoming Z-Wave commands. Currently, Indigo only passes incoming Z-Wave commands to the callback but at some point Indigo might pass other packets from the controller (ex: controller entering/existing inclusion mode). If we do this we'll probably pass them to a different callback method though so plugins don't break. 8)
00: Also related to packet type if I remember correctly and will always be 00 for incoming Z-Wave commands.
11: Node ID from which this command originated.
12: Command Packet Length (from next byte to last byte of command packet which won't include the checksum byte on the end)
32 02 21 64 00 00 18 3E 02 58 00 00 18 3E 00 00 00 00: Command Packet
CF: Checksum which you can ignore (plugins don't get passed packets that have incorrect checksums).

autolog wrote:
Command Class 250 [0xFA] doesn't exist to my knowledge. This is coming from a TZ88E power plug.

I'm not sure what command class 0xFA is, but I think 0xF0 to 0xFE might be reserved for proprietary commands the manufacturer has added. Indigo will just ignore these.

autolog wrote:
2020-11-04 RCVD: '[1, 10, 0, 4, 0, 123, 4, 70, 8, 0, 127, 191]' from '123 Unknown Indigo device'
at 08:30:13.818 Logic not yet programmed for Z-Wave Command: 'Climate Control Schedule' and Z-Wave Command Class: 'Override Report'
I am fairly certain it is a Popp Thermostat which I haven't taken the batteries out of and might have been included into my test Z-Stick that is currently disconnected.

Yes, that one looks like a thermostat command (relating to schedules) which Indigo does not support (and just ignores). It is coming from node 123.

Image

Posted on
Wed Nov 11, 2020 12:34 pm
autolog offline
Posts: 3506
Joined: Sep 10, 2013
Location: West Sussex, UK [GMT aka UTC]

Re: Z-Wave Interpretation Questions

The latest version of the plugin is beginning to come together. Sample output:
Code: Select all
2020-11-10 11:07:02.590 RCVD: '[ 01 0C 00 04 00 67 06 31 05 01 22 00 D9 58 ]' from 'T10 - Master Bedroom - Remote Thermostat'
                              Class: 'Multilevel Sensor [v1]', Command: 'Report', Sensor: 'Air Temperature', Value: '21.7º C'

2020-11-10 11:07:03.443 RCVD: '[ 01 09 00 04 00 2C 03 20 01 FF 03 ]' from 'MOTION - Porch - SENSOR'
                              Class: 'Basic Command [v1]', Command: 'Set', value: '255' | True | 'On'

2020-11-10 11:07:03.742 RCVD: '[ 01 10 00 04 00 2C 0A 71 05 00 00 00 FF 07 08 00 00 49 ]' from 'MOTION - Porch - SENSOR'
                              Logic not programmed for Z-Wave Command Class: '113 [0x71]'

2020-11-10 11:07:06.426 RCVD: '[ 01 10 00 04 00 80 0A 32 02 21 32 00 0E 00 00 00 00 4C ]' from 'Power - WeatherSleuth [Study]'
                              Class: 'Meter [v3]', Command: 'Report', Meter Type: 'Electric Meter', Value: '1.4W'

2020-11-10 11:07:09.775 RCVD: '[ 01 0A 00 04 00 41 04 30 03 00 0A 8D ]' from 'MOTION - Hall [W] - SENSOR'
                              Class: 'Binary Sensor [v1]', Command: 'Report', value: '0' | False | 'Off'

2020-11-10 11:07:09.786 RCVD: '[ 01 0B 00 04 00 41 05 31 05 03 01 0E 8C ]' from 'MOTION - Hall [W] - SENSOR'
                              Class: 'Multilevel Sensor [v5]', Command: 'Report', Sensor: 'Illuminance', Value: '14%'

2020-11-10 11:07:09.788 RCVD: '[ 01 0C 00 04 00 41 06 31 05 01 22 00 BE 19 ]' from 'MOTION - Hall [W] - SENSOR'
                              Class: 'Multilevel Sensor [v5]', Command: 'Report', Sensor: 'Air Temperature', Value: '19.0º C'

2020-11-10 11:07:15.723 SENT: '[ 01 09 00 13 71 02 31 04 25 21 A7 ]' to 'T05 - Hall - Spirit Thermostat'
                              Class: 'Multilevel Sensor [v5]', Command: 'Get'

2020-11-10 11:07:15.745 RCVD: '[ 01 0C 00 04 00 71 06 31 05 01 42 06 A3 52 ]' from 'T05 - Hall - Spirit Thermostat'
                              Class: 'Multilevel Sensor [v5]', Command: 'Report', Sensor: 'Air Temperature', Value: '16.99º C'

2020-11-10 11:07:15.755 RCVD: '[ 01 0A 00 04 00 41 04 30 03 00 0C 8B ]' from 'MOTION - Hall [W] - SENSOR'
                              Class: 'Binary Sensor [v1]', Command: 'Report', value: '0' | False | 'Off'

2020-11-10 11:07:26.458 RCVD: '[ 01 0A 00 04 00 41 04 30 03 FF 0C 74 ]' from 'MOTION - Hall [W] - SENSOR'
                              Class: 'Binary Sensor [v1]', Command: 'Report', value: '255' | True | 'On'

2020-11-10 11:07:26.479 RCVD: '[ 01 0B 00 04 00 41 05 31 05 03 01 0F 8D ]' from 'MOTION - Hall [W] - SENSOR'
                              Class: 'Multilevel Sensor [v5]', Command: 'Report', Sensor: 'Illuminance', Value: '15%'

2020-11-10 11:07:26.497 RCVD: '[ 01 0C 00 04 00 41 06 31 05 01 22 00 BE 19 ]' from 'MOTION - Hall [W] - SENSOR'
                              Class: 'Multilevel Sensor [v5]', Command: 'Report', Sensor: 'Air Temperature', Value: '19.0º C'

2020-11-10 11:07:36.890 RCVD: '[ 01 09 00 04 00 55 03 20 03 00 87 ]' from 'Kitchen Ceiling Light'
                              Class: 'Basic Command [v1]', Command: 'Report', value: '0' | False | 'Off'
I have reached a closed alpha testing stage for initial feedback from alpha testers which can be provided to this forum thread.. :)

Once it progresses to the beta stage, I will upload it to Github for wider availability and testing. :)

Page 1 of 1

Who is online

Users browsing this forum: No registered users and 1 guest