Those #!*¤ command classes

Many items in the zwave database are complaining about the command classes, such as

Endpoint 0 has no command class linked to the basic class.

Now, I have a few such devices, but I don’t get how to fix this. I know the xml and the manual must be inputs for solving this, but I don’t understand how.

For an example. Qubino ZHMNHCD has, according to manual support for the following;

Z-Wave Device Class:
BASIC_TYPE_ROUTING_SLAVE
GENERIC_TYPE_SWITCH_MULTILEVEL
SPECIFIC_TYPE_CLASS_C_MOTOR_CONTROL
Z-Wave Supported Command Classes:
COMMAND_CLASS_ZWAVEPLUS_INFO_V2
COMMAND_CLASS_VERSION_V2
COMMAND_CLASS_MANUFACTURER_SPECIFIC_V2
COMMAND_CLASS_DEVICE_RESET_LOCALLY_V1
COMMAND_CLASS_POWERLEVEL_V1
COMMAND_CLASS_BASIC_V1
COMMAND_CLASS_SWITCH_ALL_V1
COMMAND_CLASS_SWITCH_BINARY_V1
COMMAND_CLASS_SWITCH_MULTILEVEL_V3
COMMAND_CLASS_METER_V4
COMMAND_CLASS_SENSOR_MULTILEVEL_V7
COMMAND_CLASS_MULTI_CHANNEL_V4
COMMAND_CLASS_ASSOCIATION_V2
COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3
COMMAND_CLASS_ASSOCIATION_GRP_INFO_V2
COMMAND_CLASS_CONFIGURATION_V1
COMMAND_CLASS_MARK
COMMAND_CLASS_BASIC_V1
COMMAND_CLASS_SWITCH_MULTILEVEL_V3
Endpoint1:
Device Class:
BASIC_TYPE_ROUTING_SLAVE
GENERIC_TYPE_SWITCH_MULTILEVEL
SPECIFIC_TYPE_CLASS_C_MOTOR_CONTROL
Command Classes:
COMMAND_CLASS_ZWAVEPLUS_INFO_V2
COMMAND_CLASS_VERSION_V2
COMMAND_CLASS_BASIC_V1
COMMAND_CLASS_SWITCH_ALL_V1
COMMAND_CLASS_SWITCH_BINARY_V1
COMMAND_CLASS_SWITCH_MULTILEVEL_V3
COMMAND_CLASS_METER_V4
COMMAND_CLASS_ASSOCIATION_V2
COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3
COMMAND_CLASS_ASSOCIATION_GRP_INFO_V2
COMMAND_CLASS_MARK
COMMAND_CLASS_BASIC_V1
COMMAND_CLASS_SWITCH_MULTILEVEL_V3
Endpoint2:
Device Class:
BASIC_TYPE_ROUTING_SLAVE
GENERIC_TYPE_SWITCH_MULTILEVEL
SPECIFIC_TYPE_CLASS_C_MOTOR_CONTROL
Command Classes:
COMMAND_CLASS_ZWAVEPLUS_INFO_V2
COMMAND_CLASS_VERSION_V2
COMMAND_CLASS_BASIC_V1
COMMAND_CLASS_SWITCH_ALL
COMMAND_CLASS_SWITCH_BINARY_V1
COMMAND_CLASS_SWITCH_MULTILEVEL_V3
COMMAND_CLASS_ASSOCIATION_V2
COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3
COMMAND_CLASS_ASSOCIATION_GRP_INFO_V2
COMMAND_CLASS_MARK
COMMAND_CLASS_BASIC_V1
COMMAND_CLASS_SWITCH_MULTILEVEL_V3
Endpoint 3:
Device Class:
GENERIC_TYPE_SENSOR_MULTILEVEL
SPECIFIC_TYPE_ROUTING_SENSOR_MULTILEVEL
Command Classes:
COMMAND_CLASS_ZWAVEPLUS_INFO_V2
COMMAND_CLASS_VERSION_V2
COMMAND_CLASS_SENSOR_MULTILEVEL_V7
COMMAND_CLASS_ASSOCIATION_V2
COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3
COMMAND_CLASS_ASSOCIATION_GRP_INFO_V2

Well, the warning from the database gives me errors in the log;
21:46:04.320 [ERROR] [class.ZWaveMultiInstanceCommandClass] - NODE 70: Endpoint 0 not found. Cannot set command classes.

So, I figure I should fix this problem. But here’s my problems;

  1. How to know which of these above command classes are basic, and which are generic or specific types?
  2. If I somehow did know, I guess the basic ones needs to be created/checked in the database checkbox under the col ‘Basic’?
  3. What about the non-basic ones? Should I not create/checkbox those? (there’s no column for specific/generic!)

I know I’m missing something in the puzzle here. I could not find a place that would explain this well enough for my thick head. OR maybe I missed it (I’ll blame google of course)?

there is only one BASIC command class. I think you’re getting muddled up with device classes which are a totally different thing.

The BASIC class (again, just one of them) normally maps to another command class, in which case that’s the one we tick under ‘basic’ in the database.

So again, you’re mixing up command classes and device classes. There is no mapping of basic/generic/specific DEVICE classes to command classes. A device class has mandatory command classes associated with it - most of the time this doesn’t matter as the command classes are reported in the NIF.

OK, so I’ll disregard the Device classes. That makes it a little bit clearer. But:

So, this only BASIC class, would it be ‘COMMAND_CLASS_BASIC_V1’ in the example above? (or is this just a name of a class that confuses me further?)
And:- How do you find out if it maps to another command class?

Yes.

Guesswork! Well, looking in the logs or reading the manuals. Sometimes a manual might state this, or more often it will say the information that is sent in the BASIC command class is a certain value, and we can map that to another class.

So, would you say, that if it has a COMMAND_CLASS_BASIC_* specified, this normally is the basic class to select, while if it has not, the little detective in us must be called up on?

In that case, I simply tick the checkbox and be done with it.(?).

In this case, the logs that arrives looks like this;

22:26:14.982 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 10 00 04 00 46 0A 32 02 21 34 00 00 00 00 00 00 82 
22:26:14.983 [DEBUG] [ve.internal.protocol.ZWaveController] - Receive queue TAKE: Length=0
22:26:14.983 [DEBUG] [wave.internal.protocol.SerialMessage] - Assembled message buffer = 01 10 00 04 00 46 0A 32 02 21 34 00 00 00 00 00 00 82 
22:26:14.983 [DEBUG] [ve.internal.protocol.ZWaveController] - Process Message = 01 10 00 04 00 46 0A 32 02 21 34 00 00 00 00 00 00 82 
22:26:14.983 [DEBUG] [ve.internal.protocol.ZWaveController] - Message: class=ApplicationCommandHandler[0x04], type=Request[0x00], priority=High, dest=255, callback=0, payload=00 46 0A 32 02 21 34 00 00 00 00 00 00 
22:26:14.983 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 70: Application Command Request (ALIVE:ENDPOINTS)
22:26:14.983 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 70: Incoming command class METER
22:26:14.983 [DEBUG] [.commandclass.ZWaveMeterCommandClass] - NODE 70: Received METER command V3
22:26:14.984 [DEBUG] [.commandclass.ZWaveMeterCommandClass] - NODE 70: Meter: Type=Electric(1), Scale=W(2), Value=0E+1
22:26:14.984 [DEBUG] [ve.internal.protocol.ZWaveController] - Notifying event listeners: ZWaveMeterValueEvent
22:26:14.984 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 70: Got an event from Z-Wave network: ZWaveMeterValueEvent
22:26:14.984 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 70: Got a value event from Z-Wave network, endpoint = 0, command class = METER, value = 0E+1
22:26:14.984 [DEBUG] [ternal.converter.ZWaveMeterConverter] - Not the right scale E_KWh <> E_W
22:26:14.984 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 70: Updating channel state zwave:device:controller:node70:meter_watts to 0 [DecimalType]
22:26:14.984 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 27: Transaction not completed: node address inconsistent.  lastSent=27, incoming=255
22:26:15.997 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 14 00 04 00 46 0E 60 0D 01 00 32 02 21 34 00 00 00 00 00 00 EE 
22:26:15.997 [DEBUG] [ve.internal.protocol.ZWaveController] - Receive queue TAKE: Length=0
22:26:15.997 [DEBUG] [wave.internal.protocol.SerialMessage] - Assembled message buffer = 01 14 00 04 00 46 0E 60 0D 01 00 32 02 21 34 00 00 00 00 00 00 EE 
22:26:15.997 [DEBUG] [ve.internal.protocol.ZWaveController] - Process Message = 01 14 00 04 00 46 0E 60 0D 01 00 32 02 21 34 00 00 00 00 00 00 EE 
22:26:15.998 [DEBUG] [ve.internal.protocol.ZWaveController] - Message: class=ApplicationCommandHandler[0x04], type=Request[0x00], priority=High, dest=255, callback=0, payload=00 46 0E 60 0D 01 00 32 02 21 34 00 00 00 00 00 00 
22:26:15.998 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 70: Application Command Request (ALIVE:ENDPOINTS)
22:26:15.998 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 70: Incoming command class MULTI_INSTANCE
22:26:15.998 [DEBUG] [class.ZWaveMultiInstanceCommandClass] - NODE 70: Received Multi-instance/Multi-channel Request
22:26:15.998 [DEBUG] [class.ZWaveMultiInstanceCommandClass] - NODE 70: Controller has no endpoints. Probably originating (1) and destination (0) endpoints should be swapped.
22:26:15.998 [DEBUG] [class.ZWaveMultiInstanceCommandClass] - NODE 70: Requested Command Class = METER (0x32)
22:26:15.998 [ERROR] [class.ZWaveMultiInstanceCommandClass] - NODE 70: Endpoint 0 not found. Cannot set command classes.

Three lines from bottom there’s a suggestion that originating and destination endpoints should be swapped. Is this suggestion something that comes since there’s no basic command class specified, or is it another problem?

Sorry for all the questions, and thank you for explaining - but hopefully there are other thickheads out there but me, that might find this thread useful… :sweat:

No - there is no point in mapping the BASIC class to the BASIC class - that does nothing. The point of mapping the BASIC class is to say how to handle this class since it’s otherwise not defined.

All device support the BASIC class - that’s mandatory.

No - it’s nothing at all to do with the BASIC class. Endpoints are associated with the MULTI_INSTANCE class. This entry simply means that the controller only has a single endpoint so it’s not handling the message sent to an endpoint it doesn’t support.

This was added because there was a device that was setting the endpoints incorrectly (I forget what now - maybe a Greenwave device).

No probs :slight_smile:

Anyway… Can you tell me what device this is as I’d like to understand this issue a bit better. It might be that the binding isn’t doing this properly - it is a bit of a hack that was added for a specific device…

Sure! The ones I see now are Qubino ZHMNHCD and also Qubino ZHMNHDD

The ZHMNHCD (the guys that makes up these names!?) is node 70 as seen above. ZHMNHDD is node 72, and it looks like this;

22:55:56.421 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 72: Application Command Request (ALIVE:ENDPOINTS)
22:55:56.421 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 72: Incoming command class METER
22:55:56.421 [DEBUG] [.commandclass.ZWaveMeterCommandClass] - NODE 72: Received METER command V3
22:55:56.421 [DEBUG] [.commandclass.ZWaveMeterCommandClass] - NODE 72: Meter: Type=Electric(1), Scale=W(2), Value=7.8
22:55:56.421 [DEBUG] [ve.internal.protocol.ZWaveController] - Notifying event listeners: ZWaveMeterValueEvent
22:55:56.421 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 72: Got an event from Z-Wave network: ZWaveMeterValueEvent
22:55:56.421 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 72: Got a value event from Z-Wave network, endpoint = 0, command class = METER, value = 7.8
22:55:56.421 [DEBUG] [ternal.converter.ZWaveMeterConverter] - Not the right scale E_KWh <> E_W
22:55:56.421 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 72: Updating channel state zwave:device:controller:node72:meter_watts to 7.8 [DecimalType]
22:55:56.421 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 27: Transaction not completed: node address inconsistent.  lastSent=27, incoming=255
22:55:57.431 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 14 00 04 00 48 0E 60 0D 01 00 32 02 21 34 00 00 00 4E 00 00 AE 
22:55:57.432 [DEBUG] [ve.internal.protocol.ZWaveController] - Receive queue TAKE: Length=0
22:55:57.432 [DEBUG] [wave.internal.protocol.SerialMessage] - Assembled message buffer = 01 14 00 04 00 48 0E 60 0D 01 00 32 02 21 34 00 00 00 4E 00 00 AE 
22:55:57.432 [DEBUG] [ve.internal.protocol.ZWaveController] - Process Message = 01 14 00 04 00 48 0E 60 0D 01 00 32 02 21 34 00 00 00 4E 00 00 AE 
22:55:57.432 [DEBUG] [ve.internal.protocol.ZWaveController] - Message: class=ApplicationCommandHandler[0x04], type=Request[0x00], priority=High, dest=255, callback=0, payload=00 48 0E 60 0D 01 00 32 02 21 34 00 00 00 4E 00 00 
22:55:57.432 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 72: Application Command Request (ALIVE:ENDPOINTS)
22:55:57.432 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 72: Incoming command class MULTI_INSTANCE
22:55:57.432 [DEBUG] [class.ZWaveMultiInstanceCommandClass] - NODE 72: Received Multi-instance/Multi-channel Request
22:55:57.432 [DEBUG] [class.ZWaveMultiInstanceCommandClass] - NODE 72: Controller has no endpoints. Probably originating (1) and destination (0) endpoints should be swapped.
22:55:57.432 [DEBUG] [class.ZWaveMultiInstanceCommandClass] - NODE 72: Requested Command Class = METER (0x32)
22:55:57.432 [ERROR] [class.ZWaveMultiInstanceCommandClass] - NODE 72: Endpoint 0 not found. Cannot set command classes.

Interesting - I’m doing my testing at the moment with the ZMNHSD. I don’t think I see it with that - have you use other software to configure this at all? I wonder if this has had configuration using the multi instance association configured?

No, I haven’t it this is the defaults as virgins. But I also have a couple of the older ZMNHDA’s that does not behave like this.

TYPO!
ZMNHCD and ZMNHDD it shoudl be! Not ZHMNHCD/ZHMNHDD!
Getting tired… :slight_smile: