ZDO commands and sequence IDs

I’m confused about the requirement for the sequence ID byte in ZDO commands. Some documentation says it must be there [1] [2] but other documentation (like the standards document) makes no mention of a sequence byte in ZDO commands.

What seems to work in practice is not having the sequence byte according to the standards document. However that’s a puzzling omission… it’s a very useful way of matching responses to requests and odd that it would be left out in the case of ZDO commands.

What am I missing here? I find it hard to believe that the documentation from two companies who are experts in the ZigBee standard can be wrong. Is the transaction sequence ID an option? And if so how do I avail of it? (BTW: I tried just adding it… it doesn’t work… it’s treated as the first byte of the ZDO command).

[1] “All ZDO requests and responses begin with the transaction sequence number as the first byte of the payload. This allows a request to be matched up with a particular response.”

[2] “The first byte of payload in the API frame is an application sequence number (transaction sequence number) that can be set to any single byte value. This same value will be used in the first byte of the ZDO response.” XBee/XBee-PRO ZB RF modules manual.

A correction and at least partial answer to my post:

The ZigBee standard does in fact specify transaction sequence numbers (section It would seem my confusion is because I misunderstood the ZDP/ZDO. It seems there is no ZCL header in the payload. So what I thought was the ZCL header byte, was in fact the transaction sequence number which I had always set to something like 0x10. This is why it appeared to work without transaction sequence numbers.

Sorry no one else answered, but very few XBee users are way down at the ZDO/ZCL, and I don’t think the digi guys who work down there (like the Smart-Energy group) don’t read the forums.

Is you answer complete, or still partial?