请问Cooridnator中的回传数据如何透过Router回传给End-device?
您好,
我的Zigbee系统原先的设计为:
在Cooridnator中先设定要给End-device的data后,再让End-device传某一讯息给Cooridnator,使得Cooridnator中的data可以回传给End-device.
现在我想在他们之间增加Router,想要实现双方的讯息能透过Router来传达.
经过试验, End-device所传之讯息可透过Router抵达Cooridnator,但Cooridnator内的回传讯息却不能,使用sniffer观察后,发现想要回传之封包根本没出现,请问我该如何实现我想完成的功能呢?
你的协调器收到数据以后是怎么操作的?
你可以在End device发数据时把APS 的ack打开,这个ack就是通过原先的发送路径返回回来的
您好,
我的协调器收到数据后,会发送一笔资料要给End-Device
在没有路由器的状况下,这笔资料会被End-Device以data request取得
但在有路由器的状况下, data request将会由End-Device传给路由器,而协调器并没有收到data request,所以这笔数据协调器将无法发出
请问要如何解决呢?
当coordinator通过路由给end device的时候,数据先是直接发给路由器,因为协调器和路由器的rx一直打开着的,所以直接发就可以,路由收到数据以后会把数据buffer,等待end device来data request 时,再把数据发过去。
感谢您的回复,
我使用广播的方式确实能够使coordinator的讯息透过路由器到达End-Device,但单播模式下却不行,请问有解决的方式吗?
首先你要确认你的end device的父设备是路由,路由的父设备是Coordinator,在Coordinator使用单播模式,目的地址选择end device的,
你使用哪个协议栈版本,使用什么函数来发送的
您好,
我使用的是z-stack 2.5.1a中的zcl_SendReportCmd来传送讯息.
ZCL是引用HA profile.
你有用抓包看数据的具体发送情况下吗?
有的使用Sinffer观察过
使用广播的话,会出现coordinator对0xFFFF做出广播,接着Router也会做出广播,而End-Device在正确时间点发送data request的话,则封包会出现由Router传送给End-Device的广播消息.
但单播的话,则Sinffer无任何传送的数据,连一开始Coordinator给Router的也没有.
那就说明,你的协调器就没有正确的把数据发送出去,
你是通过AF_Datarequest函数来发送的吗,检查下参数都对不对
这个问题有解没?我也遇到同样问题。