ZigBee是一种本地短距无线网络协议,它主要服务于3km以内的传感器或设备网络,可用于物联网通信。ZigBee网络中有三种角色:协调器,路由器和终端节点。协调器可以生成和管理网络,一旦一个网络形成后,路由器就可以加入该网络。由于ZigBee支持自组网和mesh功能,因此它并不需要依赖于协调器来维护一个网络,有路由器信号覆盖的地方,也同样可以支持新的节点加入,在这个意义上说,路由器可以维护一个分布式的网络。终端节点是可以休眠的,没有路由功能的设备节点,它需要路由器(或协调器)作为父节点为它缓存数据。

利用入网通知管理列表

  • 默认模式

默认地,XBee3对串口事件和网络管理有一套简便机制,我们称它为Drop In Networking(DIN)规范。AO=0时即为默认的模式,串口通讯可以采用0x10发送帧和0x90接收帧。而ZigBee的三要素(profile,cluster,endpoint)被固化并隐藏起来,这倒是符合那些不了解也不想知道ZigBee底层东西,只是想利用无线传输串口数据的用户的习惯。为了在DIN规范下管理无线网络,有一些特殊的参数和AT命令可以利用。对于任一个XBee节点,开启JN=1时,首次入网时会广播自身的MAC地址信息,而开启API模式后,协调器是会收到一个0x95入网通知帧,事件代码02,如果该设备断电重启,也会有相应的入网通知帧,但事件代码03。入网通知帧中有入网节点的64位mac地址和 NI信息,网关程序可以根据这个信息组织一张MAC,NI的映身表,并管理该列表。对于非预期的入网节点可以发远程退网命令将该节点踢出网络外。

  • 用ZigBee本身的协议管理网内节点设备

如果不用JN命令,也可以利用XBee ZigBee中的ZCL帧来判断节点的入网退网信息。当XBee的AO设置为1时,串口可以输出ZigBee协议中的完整字段信息,此时一般是用0x11和0x91帧作为发送和接收帧。由于XBee的ZigBee网络层栈是完整的,ZDO的相关信息可以利用。当有节点入网时,会收到0x91帧接收帧,EndPoint=E8,Cluster ID=0095,代表这是个入网通知帧,RF payload中同样带有加入节点的MAC地址和NI. 我们可以发现,其实DIN规范中,Profile ID=0xc105, 而对于串口数据收发,Cluster ID=0x0011, Source Endpoint和Destination Endpoint都是E8.

  • 其它注意事项

如果该节点主动退网,协调器并不会把它移除,因此如果希望能自动保持网内设备的更新,还需定期主动清理早已确认不在的节点。或是在每次开放网络进行变更维护时,在网关更新最新的许可节点列表。

从协调器端可以发起主动扫描网络内节点信息的ATND命令,这在网络首次部署或是进行运维时可以配合使用,它可以在一些入网在前,应用程序运行在后时,以及程序网络列表收集不完整时,作为一个补充手段。

上面这两种方法都可以有效组织起节点入网信息。