end device的父亲 没有发出route reply
小弟是开发智能家居的 由于是单火线设备 开关面板类型必须设置为 end device
以下是抓包数据
end device 地址BF6B 他的父节点是B5B1
协调器想发个数据个BF6B 发生了路由请求 但是B5B1 并没有回应路由请求 请问这个是为什么 这个偶有发生与zigbee规范上描述不一样
这个抓包数据中 B5B1 从来都不会 路由应答
因为网络中有大量的 终端节点设备 为了维护路由的稳定性 每个end device 每隔10s 调用一次 ZDApp_AnnounceNewAddress() 保证路由的稳定性
ti 大神救命啊 这个问题怎么解决
@Jie liao
你好,想了解你做ZigBee研发有多少时间了? 另外你用的ZIgBee协议栈是哪个版本的?
通过抓包数据有几个问题
1) 你在协议栈中对Coordinator和Router的Link Sttaus的周期是多少? Coordinator和Router的周期是否一样?
2) 定期发送Device Announce出来,对网络并没有什么好处的,收到device Announce以后,认为有新的设备入网,会邻居表清空,然后你的Router之间有没有正常的Link Status来维护邻居信息。
所以0xB5B1即便收到0x0000的Router Request也没法回复Router Reply。
建议,
1)把Link Status恢复正常
2) 把定期发送的Device Announce去掉。
另外建议可以看下ZigBee Specification中关于ZigBee协议的Spec。
vv 大神 你好 我开发zigbee有几年了 去掉定期发送Device Announce 确实 稳定性好多了,我这里Link Sttaus 没有改变 而是协调器上电的时候多发了一个 Link Sttaus 等一下我去掉他实验一下
主要开发方向智能家居 单火线系列产品
当初加入定期发送Device Announce 的目的是 为了解决 下面这个问题
第一步:路由器A 有个孩子E
第2步:A掉电了 E加入了B 并发了设备宣告 (A因为掉电了收不到)
第3步:A又突然上电了
第3步:当协调器想法数据给E ,先发路由请求 A与B 同时发出Router Reply
第4步:当协调器 想法数据给E (在个时候路由已经建立好) 协调器会发给A 而不是给B ,数据在A上保留7s 然后丢弃 ,这样E 就收不到数据了 ,然后我就尝试着周期性发设备宣告 但是好像问题更加多了~~~
去掉周期性发设备宣告 有什么办法规避以上场景的发生
抓包数据如下:
协议栈版本 2.5.1.a 下面是两个路由器同时上报 Router Reply 导致 0x0000线发数据给6E7E, 先发数据给F28C , 而不是发给真正的父节点5775 ,因为这样 6E7E收不到数据
这种发生的概率非常 高且没有办法
麻烦把你的抓包文件用附件上传下,我可以打开解析着看,谢谢。
另外麻烦私信告诉我下你的公司,可以吗?
@jie liao,
你考虑的这个问题在实际应用中确实会发生,在Zigbee Alliance的最新Specification R21里面,已经讨论了这个问题,并且增加相关的功能。
TI的最新协议栈Z-Stack Home 1.2.2里面已经把这个功能加进去了,主要用到的方法是,
1) 如果Old Parent发数据给子设备,这个数据buffer在底层,如果长时间 没有收到data request,那么Old Parent会把该子设备从Associate List删除掉。
2)如果是其他设备发数据给该子设备,先发送到old parent上面,那么old parent会发出来network status command告诉源地址,这个子设备不存在了,这个路由链路是无法用了,所以让源节点把路由设备删除掉。
困扰好久的问题,终于有个合理的解释了;
当时遇到这问题时,将数据发送不经路由的方式给绕过了。
mark下
Hi VV:
是否方便提供下 下载Specification R21链接?
官网上只找到R20版本
@guozi,
由于R21版本还没有正式发布,目前也只是内部草稿版的。
等正式发布以后,便可在官网上找到了。
VV
如果是其他设备发数据给该子设备,先发送到old parent上面,那么old parent会发出来network status command告诉源地址,这个子设备不存在了,这个路由链路是无法用了,所以让源节点把路由设备删除掉。
VV你好,我现在也有这个问题, 我用的协议栈是1.2.2a,开启了MTO 你说的old parent会发出来network status command告诉源地址我小抓包的时候没看到 但是会在routeRequest的回复里看到过,让女孩子这个指令会带一个回复码,但是我怎么也找不到这个指令的相关调用 ,其实找不到也就算了,但是关键是现在我的协议栈不正常,end切换父节点了而且也发出宣告了但是 协调器仍然发给了原来的父节点 打印路由表 要么就是没这个设备的路由 要么就是路径是错的 ,搞的我很烦 而且有时候end的父节点发出了RouterReply但是协调器也不回应 有点像收不到的样子 能不能帮我看看啊
请问是不是开了concentrator_catch导致的呢,但是我用的是cc2538 按理说开启这个catch也没有问题啊 heap_size设置的6k ,再设大点编译就出错,
被这个End的问题快搞疯了 ,各种各样的问题 难道说协议栈对mto的支持本身就不完整,天然的BUG?
- 请问associated_devices_t AssocAddNew( uint16 shortAddr, byte extAddr, byte nodeRelation );中nodeRelation怎么得到?
- Z-Stack SampleRemote EB - EndDevice是控制程序吗
- msp430f2618+cc2520 EndDevice 如何做到定时休眠
- ZCL_HA_DEVICEID_COLORED_DIMMABLE_LIGHT包含路径错误问题
- CC2530 Zigbee 改变编译形式问题(从End-Device转为Coordinator或Router)
- 如何检测END-DEVICE是否掉线