This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

终端不能通过路由入网

6790行,终端D729不能通过路由A68F入网,因为路由A68F一直不给终端发送key。但终端是可以通过其他路由入网的,说明是这个路由的问题。求解

  • 1869行协调器给门锁435D发送开锁指令,通过路由FE98转发。但FE98不转发。

    门锁435D的父节点是E6B0。

    1873和1896行的link status中查看路由FE98和门锁的父节点路由E6B0都是连接的。

    但通信不上。后面还有好几条数据同样如此。除非门锁重新入网,求解路由不转发.zip

  • 至少我也遇到过通过路由无法入网的问题,最后我不得不将设备放在协调器附近,让其入网,之后再部署到所需位置,不知道其他人有没有遇到。

    0xA68F收到Transport key之后似乎并没有给你的目标节点0xD729发送,你的那么多设备怎么都在拼命发data request,我觉得可能是这个导致网络拥塞,才无法入网的。
  • 如果是可以移动的终端是可以移动位置来改变父节点来解决。但是像单火开关和门锁,很难改变位置的。终端有时候总是一直加那个加不上的路由父节点。
    实际使用中,30-50是很正常的,甚至70多个设备都很普遍的。
  • 从ZigBee协议角度来说,节点加入网络选择父设备是随机的。

    若是您需要自己修改协议的话,可以下面函数中做修改:

    ZDO_beaconNotifyIndCB( NLME_beaconInd_t *pBeacon )
  • 路由不转发的问题不只是入网时候,与终端上下行数据,都可能出现。1869行协调器跟门锁发送开锁指令。先发给路由1,但路由1没有转发给路由2.门锁的父节点是路由2.
    也碰到过终端汇报数据给协调器,中间结果路由,但路由不转发的情况。使用的都是zcl_sendcommand命令发送的,参数也没有NwkFrameCounter啊,也不存在NwkFrameCounter不变啊,也不是2级路由的问题,1级路由也发生过。
  • 虽然不是对题,但对于zigbee技术的探讨,也不算是题外话。

    1、目前就我遇到的zigbee控制类问题,也同样类似,协调器下发给被控终端的指令,经过多级router后,有时候莫名其妙的丢失(即控制不到),但有时候又正常。这和当初预想的zigbee可以多级转发效果迥异。我发现默认的协议栈zcl_ota.c里面OTA会不停的一直不定时发出OTA image request请求包,节点多了之后大家都一直在发,可能导致网络拥塞,MAC层溢出丢包了,毕竟MAC层的收发队列是有限的(默认各5个),短时间内收到大量数据包来不及转发,可能就会导致丢包。

     

    #ifndef ZCL_STANDALONE
      // Register for all OTA End Point, unhandled, ZCL foundation commands
      zcl_registerForMsgExt( task_id, ZCL_OTA_ENDPOINT );
    #endif
    
    #if 0
      // Per section 6.1 of ZigBee Over-the-Air Upgrading Cluster spec, we should
      // periodically query the server. It does not specify the rate.  For example's
      // sake, here we query the server periodically between 5-10 minutes.
      uint32 queryImgJitter = ( ( uint32 ) osal_rand() % OTA_NEW_IMAGE_QUERY_RATE ) + ( uint32 ) OTA_NEW_IMAGE_QUERY_RATE;
      osal_start_reload_timer ( task_id, ZCL_OTA_QUERY_SERVER_EVT, queryImgJitter );
    
      // Wake up in 5 seconds and do some service discovery for an OTA Server
      queryImgJitter = ( ( uint32 ) 5000 );
      osal_start_reload_timer ( task_id, ZCL_OTA_SEND_MATCH_DESCRIPTOR_EVT, queryImgJitter );
    #endif  
      // Initiliaze OTA Update End Request Transaction Seq Number
      zclOta_OtaUpgradeEndReqTransSeq = 0;
    
    #endif // (defined OTA_CLIENT) && (OTA_CLIENT == TRUE) 
    }

     

    2、我禁掉了所有router里面的定时器发送OTA image request,改成image notify这种方式升级,这样任何router只要不升级,就不要再发image request不断请求有没有升级包可用,我觉得zigbee规范里面定义这一段就是傻x,改成notify这种方式能死吗?平时谁蛋疼的要一直在那请求升级不成,还浪费"网络带宽"。这样改了之后,网络基本上非常空闲,测试过多次,都能控制到,基本上百发百中。

     

    3、虽然这样暂时能解决问题,但是遇到诸如“同频干扰”,比如我测试了在网络附近有同样另外一组协调器网络,同样的11信道,然后那组一直进行OTA升级,即空中包不断有image block request以及image block response发出。这样此时对被控终端进行控制,有时候也会出现控制指令无法到达终端的问题,分析了zigbee linux gateway里面的代码,发现他的机制是每次发送控制指令,都对transcation进行跟踪,一旦发现发送超时了,就立即执行单播route request,这样就相当于执行了路由发现,但是后面他也没再进行重发指令,我觉得如果要改进,必须增加APP层的重发机制,这样之后,比如正常指令到达只需要50ms,但此时经过超时判断显然需要几秒钟才能到达,但总比莫名其妙的丢失强。

     

    4、我想即使是MAC ACK和APS ACK这两套机制加起来,也必须你自己的协调器上层APP配合transID和对应的AF_DATA_CONFIRM_CMD以及失败重发机制,才能确保指令100%到达被控终端(看好了,是100%,不是99.999999%,任何偶尔一次的无法打开/关闭空调,都是无法接受的),不然就一定会出现莫名奇妙控制不到的情况,显然这会严重影响zigbee的实际应用,比如人家要开个空调,结果指令发过去了以为空调已经打开,结果实际没打开,这不严重影响客户对产品的信任。

  • 你说的1.2点一般是碰不到的,一般不使用ota功能一般都要十多分钟才可以,也没有多大必要去ota。
    第3。4点,我理解zigbee就如同udp一样,是可能丢包的,要达到100%是要有应用层自己做的。但正常zigbee层也不至于丢到不能用,肯定是有问题导致的。
    通常通信不上就是路由不转发,这个是可深入调查探讨的。vv提出如果父节点保存的Framecounter比终端发送数据的Framecounter还小的话,如果使能了加密,那么网络层会丢弃这个包。这是我目前知道的路由不转发的唯一解释。但是全局搜索Framecounter。只有在一些初始化的地方有Framecounter清零。不知道这个Framecounter是如何管理的。
    如果终端从父节点1掉线了,重连后Framecounter就是0了。是不是这个时候出现了Framecounter小于原来保存值的情况呢
  • 不知道ubiqua抓包是否能看到对应的Framecounter,这个你可以试一下。

    至于像不像UDP,我觉得如果APS ACK能有正常返回,结合transID让上层APP来判断,应该基本上算是TCP了。
    路由不转发只能是表面上的症状,底层不一定是什么问题,只是代码都不开源,也不清楚里面是不是出了bug,不过据我对TI已公开的代码使用测试看,里面还是有很多bug,不是内存泄漏,就是功能异常
  • nwkFrameCounter到底是如果管理的啊

    要像你说的ti不用干了黄了算了。有问题还要要针对问题解决的,解决不了就怪不开源有bug也无济于事。我也碰到过小米插座不转发的问题,把插座拔掉,终端重新入网就好了

  • TI的代码的确有bug且不开源,这是事实,不是谁信口雌黄。

    但我们作为用户,也没办法的事情,能做的就是自己上层增加APS ACK处理机制,最起码在控制失败的时候能及时通知给用户,而不是"默默无闻"。

    就目前我观察到的情况,e2echina基本上还是支持的人太少,就那三个人经常过来看看,别的没有了,很多问题都是悬而未决,对于最后的追问不了了之,现在遇到的这些问题,前几年做TI zigbee的人也会遇到,就算搜到相应的帖子,也没有结果。

    我之前发现的几个bug,在e2echina问了没人搭理,最后迫不得已去e2e英文论坛上直接反馈了,TI工程师立马就给确认并给出解决方案了,相比之下,e2echina就差远了。
  • APS ACK这个是怎么打开查看的啊。ti默认好像是不打开的只有mac的ack
  • 误把extra options的cfg改成终端了,不影响本身通信,到路由功能不好用了
  • APS ACK 可以到AF_DataRequest的option這個參數打開