Can I verify a specific Zigbee Cluster / Attribute is implemented?

I have a device that expects/ uses cluster / Attribute:

CLUSTER_ID_GEN_MULTISTATE_VALUE_BASIC (0x0014)
attribute: ATTRID_IOV_BASIC_STATE_TEXT (0x000E)

According to the Zigbee spec in section 3.14.10 "Multistate Value (Basic)"

How can I verify this is implemented on the Hubitat Hub?

I ask because the expressif implementation (I know this is a different system) has the note:

    // TODO: Support Text attribute
    // ESP_ZB_ZCL_ATTR_MULTI_VALUE_STATE_TEXT_ID = 0x000e, /*!< Text attribute */

expressif github info

I don't see any reason this just wouldn't work with the Zigbee stack as-is; in your parse() method, you'd just look for the right cluster and attribute (by number or hex string). The only place this would need to be really "implemented" is if you use the enums defined for you in the zigbee object (e.g., ON_OFF_CLUSTER, etc., instead of 6 or 0x0006), which seems pretty rarely used.

But even then, a quick look shows MULTISTATE_VALUE_CLUSTER exists even if you went that way. :slight_smile:

See what data comes into parse() and what the result of zigbee.parseDescriptionAsMap() is would be my suggestion in case that wasn't clear from above. But again, I can't see any reason these would be a problem (custom clusters and attributes, as various manufacturers implement, are not a problem, and standard ones shouldn't be, either).

1 Like

Thanks. I've just had no luck in getting a message through. It could be the device is not what I think, however others have stated that this feature (MULTISTATE_VALUE_BASIC) works with MQTT.

The device function is to receive a message via Zigbee and send it out as serial via the UART.

Map [raw:catchall: 0104 0014 01 01 0040 00 FA2A 00 00 0000 01 01 0E008F, profileId:0104, clusterId:0014, clusterInt:20, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:FA2A, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:01, direction:01, data:[0E, 00, 8F]]

 "he wattr 0x${device.deviceNetworkId} 1  0x0014 0x000E 0x41 0x01 {0423383432}"

or

 "he wattr 0x${device.deviceNetworkId} 1  0x0014 0x000E 0x41  {0423383432}"

I've tried a large number of wattr variations with no luck.

Perhaps a Zigbee sniffer might help.

Have you tried using zigbee.writeAttribute() to avoid any problems that might arise from trying to construct these strings yourself?

(Also, my assumption above is that this was data coming in from the device, so not entirely applicable, but I still don't see anything that should get in the way...)

When in doubt, I use this utility :

The error code 0x8F (the third byte in the data array) means 'WRITE ONLY' error - should be returned by the device if you are trying to read this attribute...

In situations like this, a Zigbee sniffer will help a lot!

2 Likes

Thanks,
Perhaps I'm taking the .writeAttribute construction too literally, however I'm trying to send multiple bytes of data which are not just numbers i.e. {0423343536}. I could not see how to do that in .writeAttribute.

zigbee.WriteAttribute also accepts string data in the value parameter:

writeAttribute(Integer cluster, Integer attributeId, Integer dataType, String value, Map additionalParams = [:], int delay = 2000)

you can also see how wattr is formatted by simply logging the result:
log.debug zigbee.WriteAttribute(.....)

1 Like