1.当地址类型为AddrNotPresent,协调器发送指令后,是不是所有绑定的终端都能收到?
2.地址类型为AddrNotPresent,目的地址的enpoint和短地址怎么设置?
3.地址类型为AddrNotPresent,如果协调器发送后所有绑定的终端都能收到,那么如何只控制一类终端(比如终端有开关,插座,灯)?
4.zclGeneral_SendOnOff_CmdOn命令发送后,终端给协调器的应答,协调器是哪里收到的?是不是case ZCL_CMD_DEFAULT_RSP?
Viki Shi:
请看原文,应该能解答你的疑问:
this is when the application is not aware of the final destination of the packet. The mode is set to AddrNotPresent and the destination address is not specified. Instead,the destination is looked up from a “binding table” that resides in the stack of the sending device.When the packet is sent down to the stack, the destination address and end point is looked up from the binding table and used. The packet is then treated as a regular unicast packet.
user5367314:
回复 Viki Shi:
这个意思就协调器发了之后,所有绑定的终端都能收到
比如我有10个灯,10个插座,用AddrNotPresent类型发指令,插座和灯都是同开同关,这不是想要的
我要10个灯一起控制,不改变插座的状态,我是不是在协调器端发10条单播指令给10个灯?
因为组播和广播没有单播稳定,在协调器端发10条单播指令给10个灯,这个会不会延时比较大,
而且效果不知道怎么样?所有灯能不能一起动作?
YiKai Chen:
回复 user5367314:
协调器端发10条单播指令给10个灯,这个会延时比较大,10个灯要一起控制要用组播
Alvin Chen:
回复 user5367314:
user5367314这个意思就协调器发了之后,所有绑定的终端都能收到 比如我有10个灯,10个插座,用AddrNotPresent类型发指令,插座和灯都是同开同关,这不是想要的 我要10个灯一起控制,不改变插座的状态,我是不是在协调器端发10条单播指令给10个灯? 因为组播和广播没有单播稳定,在协调器端发10条单播指令给10个灯,这个会不会延时比较大,而且效果不知道怎么样?所有灯能不能一起动作?
Viki Shi:
回复 user5367314:
AddrNotPresent是搜索绑定表,然后把信息发送给绑定的设备,如果绑定了多个设备,则相关设备都会收到
控制多个设备的话,组播比较好,当然单播也可以,延时还好
user5367314:
回复 Viki Shi:
我这边就是基于3.0.2例程的,协调器是基于switch例程,终端是基于light例程
我想协调器组播去控制终端,具体实现的步骤是怎么样的?请提供下思路,谢谢YiKai Chen:
回复 user5367314:
可以參考一下 dev.ti.com/…/zigbee_06_zcl.html
user5367314:
回复 YiKai Chen:
好的,我试试,另外请教个问题
实现开关操作我可以用ZCL_CLUSTER_ID_GEN_ON_OFF cluster
但是如果要穿自己的数据(比如几十个字节的数据)
ZCL没有定义这样的,需要自己定义,ZCL规范里只是介绍了,
但是没说具体怎么定义私有的cluster,是否可以指导下YiKai Chen:
回复 user5367314:
簡單一點你可以共用 ZCL_CLUSTER_ID_GEN_ON_OFF cluster 然後加個私有的attribute ID使用ZCL_DATATYPE_ARRAY這個類型数据就行
user5367314:
回复 YiKai Chen:
例如开关灯的attribute ID为
#define ATTRID_ON_OFF0x0000
1.私有的ID也不是随便定义的私有的值的范围是多少?
2.在zcl_general.h里定义了私有attribute ID,还需要对该ID做哪些处理吗?还是直接就能用了?
3.是不是要在zcl_samplesw.c里做类似以下的处理即可?其他还有什么地方要处理吗?{ZCL_CLUSTER_ID_GEN_ON_OFF,{// Attribute recordATTRID_CLUSTER_REVISION,ZCL_DATATYPE_UINT16,ACCESS_CONTROL_READ | ACCESS_CLIENT,(void *)&zclSampleSw_clusterRevision_all}}
4.针对第3条,下面的哪些参数是需要的,我这边就是协调器和终端互传私有数据,
不清楚该用下面的哪些参数组合?
/*** Attribute Access Control – bit masks ***/
#define ACCESS_CONTROL_READ0x01// attribute can be read
#define ACCESS_CONTROL_WRITE0x02// attribute can be written
#define ACCESS_REPORTABLE0x04// indicate attribute is reportable
#define ACCESS_CONTROL_COMMAND0x08
#define ACCESS_CONTROL_AUTH_READ0x10
#define ACCESS_CONTROL_AUTH_WRITE0x20
#define ACCESS_GLOBAL0x40// TI unique to indicate attributes that are in both, client and server side of the cluster in the endpoint
#define ACCESS_CLIENT0x80// TI unique, indicate client side attribute