PC机如何通过协调器获取网络节点数、节点状态、节点短地址和物理地址等信息?
如上图,PC机与协调器通过串口通信。
问题:PC机如何才能通过协调器获取该ZigBee网络的节点数、所有节点的在线状态、短地址及物理地址等信息?
可以在应用层定义一个命令,让路由器与终端设备定期把自己的短地址,长地址,及状态上报给协调器。
协调器通过检查是否定期上报了判断是否在线,然后通过UART传输给PC。
如果上述的是ZigBee标准的Home Automation网络,协调器是自己的,而路由或终端节点是第三方的,这样还有什么解决办法吗?
每个节点在加入网络时会发送device announce包,里面有该节点的网络地址与长地址信息。协调器可以记录下来后定期去发送ZDP_nwkAddrRequest 或 ZDP_ieeeAddrRequest来等待回应。
有回应说明在网,运行正常。并且即使短地址发生变动了,通过这2个命令也能定时更新回来。
这样的话,协调器就要把所有的节点信息都存储起来了。在网状网络中,如果某一节点是通过路由加入网络的,那么会发送“device announce包”给协调器吗?
是的,得存储,如协调器资源有限可以给连接的PC存储。
device announce是广播,理论上都能听到。
如果这个节点加入路由时,协调器由于某种原因没有收到这个广播,那么有没有其他办法获取该节点信息,并存储该节点信息?
还有个问题:在市场上看到的一些ZigBee标准的Home Automation产品,可以用平板电脑或手机,通过WiFi转ZigBee网关,查看家里所有zigbee节点的状态,如灯节点的开关状态、温度传感器节点的温度值、排气扇节点的状态等;这些都是如何实现的?协调器是否要事先存储各节点的信息(如短地址等信息),才能获取节点信息和控制节点?
如果你应用层什么都不做,那可以分析neighbour table中以及route table中存在的所有节点,以此来检查有没有漏接收某些节点的消息。当然neighbour table和route table大小都是有限制的,且动态更改的,有些距离很远的节点若不产生直接通信,是不会出现在协调器的neighbour table中的。
这些产品都是通过应用层自己实现的。协议栈只能给你这些网络的特性,并保证网络及数据的顺利运行。Home Automation profile只是定义了一套标准的设备要交互的话需要哪些属性与命令。Z-stack提供了这些属性与命令的API,至于具体采集哪些传感器的值,哪些状态要采集,如何显示与监控都由各家根据自己的需求在应用层进行实现。