More xbee frame problems

I have several Xbee series 2 modules I’m trying to use in a project. I also have Digi documents 90000991_B.pdf and 90000976_S.pdf along with the Faludi book and Titus’ “The Hands on xBee Lab Manual”. I cannot find correct data on how to decode the packets I’m seeing.

For example, I have a coordinator and end device configured for API, no excapes.

I send 7e000408524e4413(Node discovery).

I get back : 7e 001c 88 52 4e44 007d33a2 00 4079d070 45303230 00 00000200c105101e 65

All devices return a similar packet.

Documentation indicates the packet should be type 95 (return for ND) not 88 (return for AT). Also it indicates the packets should end after the NI delimiter with a checksum.

XCTU test query returns type XB24-ZB, S/N 0013a2004079d070

XCTU Read returns

XB24-ZB ZIGBEE END DEVICE API 29A7

SH 7D33A2

SL 4079D070

The results are the same for Raspberry PI, Arduino, and my PCs.

I have two questions :

Why does XCTU SH/SL not match the device serial numbers?

Where can I find informaton on how to parse the return packets? Not just this one, but all types…

BTW, I program in C/C++ or PERL, but not Python.

The ND command is an AT type command so Frame type 0x88 is correct. Look at the 90000976 document on Frame Type: 0x88. Do not confuse the return for a “Node Discovery” for a “Node id” packet, they are different.

This frame: 7e 001c 88 52 4e44 007d33a2 00 4079d070 45303230 00 00000200c105101e 65

returns the AT command 0x4e44 = ‘ND’

Command status: 0x00 = ok

Command data: 7d33a2 00 4079d070 45303230 00 00000200c105101e

It does have most of the 64bit address of the node ( 3a200 4079d070) but the first three nibbles seem wrong (7d3).

Ok, after the device address is the NI (Node Identifier) which is up to a 20-byte ASCII string.

45303230 = ‘E020’

Look up the AT COmmand “ND” description in the doc. it is:

Node Discover

Discovers and reports all RF modulesfound. The following information

is reported for each module discovered.

MY

SH

SL

NI (Variable length)

PARENT_NETWORK ADDRESS (2 Bytes)

DEVICE_TYPE (1 Byte: 0=Coord, 1=Router, 2=End Device)

STATUS (1 Byte: Reserved)

PROFILE_ID (2 Bytes)

MANUFACTURER_ID (2 Bytes)

Thanks,

I think I now have it figured out. I did get crossed up on the ND, NI, and some search terms. Some of the devices had API mode 2, which confused the addresses. Also there are no (0x0d) separators, and a 00 delimiter is inserted after the NI.

Also the 900000976_S is the one to read. I think I am now equipped to attack the other messages.

lyttlec:
I have several Xbee series 2 modules I’m trying to use in a project. I also have Digi documents 90000991_B.pdf and 90000976_S.pdf along with the Faludi book and Titus’ “The Hands on xBee Lab Manual”. I cannot find correct data on how to decode the packets I’m seeing.

For example, I have a coordinator and end device configured for API, no excapes.

I send 7e000408524e4413(Node discovery).

I get back : 7e 001c 88 52 4e44 007d33a2 00 4079d070 45303230 00 00000200c105101e 65

All devices return a similar packet.

Documentation indicates the packet should be type 95 (return for ND) not 88 (return for AT). Also it indicates the packets should end after the NI delimiter with a checksum.

XCTU test query returns type XB24-ZB, S/N 0013a2004079d070

XCTU Read returns

XB24-ZB ZIGBEE END DEVICE API 29A7

SH 7D33A2

SL 4079D070

The results are the same for Raspberry PI, Arduino, and my PCs.

I have two questions :

Why does XCTU SH/SL not match the device serial numbers?

Where can I find informaton on how to parse the return packets? Not just this one, but all types…

BTW, I program in C/C++ or PERL, but not Python.

If you use an Atmel AVR or a PJRC Teensy 3, you can use the Arduino XBee library for XBee S1 and S2.

On Windows or Linux or MAC, you can use an XBee library for Python 2.x.

Or build your own API processor - which is much simpler for XBee S1 than S2/Zigbee. S1 has a mesh option called DigiMesh.