Indicator Command Class - How to use question?

I'm trying to use the implement the Z-wave plus 'identify' function using the indicator v3 command class.

According to the z-wave specs, I should be sending an Indicator Set with the parameters listed below. However, looking at the Indicator V3 IndicatorSet command in hubitat (ZWave Classes - Hubitat Documentation) it seems there are only two parameters to set (indicatorCount and Value). So how do I properly format the indicatorSet message? Thanks.

@bcopeland Bryan, I think the question above might be one for your expertise. I tried using:

zwave.indicatorV3.indicatorSet(indicatorCount:3 , value:0, payload: [ 0x50, 0x03, 0x08, 0x50, 0x04, 0x03, 0x50, 0x05, 0x06] )

But that just gave an error:

dev:2262021-03-01 12:51:21.041 pm errorgroovy.lang.ReadOnlyPropertyException: Cannot set readonly property: payload for class: hubitat.zwave.commands.indicatorv3.IndicatorSet on line 429 (indicate)

payload is read only .. It is generated ..

I think you are looking for indicatorValues ?

Thanks. I see the problem now -- "indicatorValues" isn't listed as a parameter for indicatorv3, which is what I was looking at. I now see it is listed for v2.

@bcopeland
It looks like there may be a bug in zwaveSecureEncap(cmd) for this class.

Here's why I think that . . .

I have a simple function to call indicatorSet. Because I was getting errors, I put in two log.debug lines.

void indicate()
{
	List<Short> indicators = [ 0x50, 0x03, 0x08, 0x50, 0x04, 0x03, 0x50, 0x05, 0x06]
	log.debug "indicatorSet is: " + zwave.indicatorV3.indicatorSet(indicatorCount:3 , value:0, indicatorValues: indicators )
	log.debug "indicatorSet secured is: " + secure(zwave.indicatorV3.indicatorSet(indicatorCount:3 , value:0, indicatorValues: indicators ))
	sendToDevice(secure(zwave.indicatorV3.indicatorSet(indicatorCount:3 , value:0, indicatorValues: indicators ))) // Home Monitoring	
}

The secure function is also straightforward. Again, note the debugging line

String secure(hubitat.zwave.Command cmd, Short ep = null ){ 
log.debug "Trying to secure ${cmd} with endpoint ${ep}"
	if (ep) {
		return zwaveSecureEncap(zwave.multiChannelV4.multiChannelCmdEncap(destinationEndPoint: ep).encapsulate(cmd))
	} else {
		return zwaveSecureEncap(cmd) 
	}
}

When I run the indicate() function I get the following logged output

dev:2262021-03-01 02:35:16.521 pm errorgroovy.lang.MissingPropertyException: No such property: indicatorId for class: java.lang.Integer on line 1984 (indicate)
dev:2262021-03-01 02:35:16.489 pm debugTrying to secure IndicatorSet(value:0, indicatorCount:3, indicatorValues:[80, 3, 8, 80, 4, 3, 80, 5, 6]) with endpoint null
dev:2262021-03-01 02:35:16.484 pm debugindicatorSet is: IndicatorSet(value:0, indicatorCount:3, indicatorValues:[80, 3, 8, 80, 4, 3, 80, 5, 6])

Note the errorgroovy.lang.MissingPropertyException error. This error is occurring at line 1984 which is the line

		return zwaveSecureEncap(cmd) 

in the secure function. It appears that zwaveSecureEncap is looking for a property indicatorId which isn't even part of the indicatorSet command..

indicatorValues is a List<Map<String, Short>>

the map consists of: indicatorId, propertyId, value

One way to visualize this .. is to do an indicatorGet.. You will see the indicatorReport follows the same format as indicatorSet.. you will get a List<Map<String, Short>> that is the exact format you should use for indicatorSet

indicatorSet

Thanks.
So for the example I gave, corresponding to the first post, should I have done:

	Map<String, Short> indicators = [ "5003":0x08, "5004":0x03, "5005":0x06]
	sendToDevice(secure(zwave.indicatorV3.indicatorSet(indicatorCount:3 , value:0, indicatorValues: indicators ))) // Home Monitoring	

No..

Map<String, Short> indicators = [
"indicatorId": shortValue,
"propertyId": shortValue,
"value": shortValue

see SDS14220 for propertyIDs and IndicatorIds

1 Like

Indicator CC has become a massive convoluted mess of a standard if you ask me.. It is quite confusing to get started using this one..

and of course indicatorValues is a List of that Map structure..

OK, I think I get it now. Its more like:

List<Map<String, Short>> indicators = [[indicatorId:0x50, propertyId:0x03, value:0x08], [indicatorId:0x50, propertyId:0x04, value:0x03] ,  [indicatorId:0x50, propertyId:0x05, value:0x06]]
1 Like

Yep.. that's it

1 Like

Thank you!

1 Like

Anytime

On an unrelated note, what's the proper way to capitalize the zwave plus info get command. I've tried all sorts of ways and don't seem to be getting it right and the online docs don't have it correct either. My last attempt was:

zwave.zwavePlusInfoV2.zwaveplusInfoGet()

And if you can, what's the corresponding report that is returned. Is it:

hubitat.zwave.commands.zwaveplusinfov2.ZwaveplusInfoReport

Thanks.

hubitat.zwave.commands.zwaveplusinfov2.ZwaveplusInfoReport
zwave.zwaveplusInfoV2.zwaveplusInfoReport