子设备连HA,能正常连接,但无法report数据

Zigbee 子设备开发


jafil10
Posts: 117

请问,这个问题有进展吗?

User avatar
huanghuan
Posts: 327

Re: 子设备连HA,能正常连接,但无法report数据

1.你好,这部分低功耗的report 因为定时器没有及时刷新导致report 有些异常,你可以按照附件demo的方式,使用tal_zg_write_attribute_with_callback 同时在 tal_zg_post_write_attribute_callback函数中统一使用 zigee_report_check_delay刷新定时器解决。
2.同时由于原厂协议栈在 reportableChangeValueChk 函数中的值比较存在歧义,低功耗检查report table是判断条件为>reportableChange, 所以该值为0是可以将增量为1时的变化触发上报,与zigbee3.0 report table的方式判断是有些歧义的,高版本原厂协议栈已经修复,后续tuyaos也将合入修复项。

Attachments
tuyaos_demo_zg_light2.7z
(3.34 MiB) Downloaded 7 times
jafil10
Posts: 117

Re: 子设备连HA,能正常连接,但无法report数据

huanghuan 2025年 Nov 24日 13:48

1.你好,这部分低功耗的report 因为定时器没有及时刷新导致report 有些异常,你可以按照附件demo的方式,使用tal_zg_write_attribute_with_callback 同时在 tal_zg_post_write_attribute_callback函数中统一使用 zigee_report_check_delay刷新定时器解决。
2.同时由于原厂协议栈在 reportableChangeValueChk 函数中的值比较存在歧义,低功耗检查report table是判断条件为>reportableChange, 所以该值为0是可以将增量为1时的变化触发上报,与zigbee3.0 report table的方式判断是有些歧义的,高版本原厂协议栈已经修复,后续tuyaos也将合入修复项。

第2点,不是很理解。现在SDK中, reportableChangeValueChk 对应用层是屏蔽的吧?

低功耗检查report table是判断条件为>reportableChange, 所以该值为0是可以将增量为1时的变化触发上报,与zigbee3.0 report table的方式判断是有些歧义的

这个对 3.12.0 SDK有什么影响呢? 现在这个针对 value 型的dp点,只要变量化大于0,就会触发上报吧?

另外,对于一些command要怎么发送呢?比如 thermostat中的 Get weekly schedule response,当本地编程发生变化后,需要使用这个命令上报。

User avatar
huanghuan
Posts: 327

Re: 子设备连HA,能正常连接,但无法report数据

1.现在这个针对 value 型的dp点,只要变量化大于0,就会触发上报吧? ---- 是的
2.对于一些command要怎么发送呢?比如 thermostat中的 Get weekly schedule response,当本地编程发生变化后,需要使用这个命令上报。 ----- sdk无法感知你何时需要进行类似report table的属性report,无法被动触发,所以你需要使用原厂 函数主动触发

Code: Select all

_CODE_ZCL_ status_t zcl_sendCmd(u8 srcEp, epInfo_t *pDstEpInfo, u16 clusterId, u8 cmd, u8 specific,
				  	  	  	  	u8 direction, u8 disableDefaultRsp, u16 manuCode, u8 seqNo, u16 cmdPldLen, u8 *cmdPld)
jafil10
Posts: 117

Re: 子设备连HA,能正常连接,但无法report数据

了解。

参数中 epInfo_t *pDstEpInfo,这个需要指定哪些参数呢?

User avatar
huanghuan
Posts: 327

Re: 子设备连HA,能正常连接,但无法report数据

Code: Select all

typedef struct{
	tl_zb_addr_t dstAddr;

u16  profileId;
u16	 aliasSrcAddr;

bool useAlias;
u8	 aliasSeqNum;
u8 	 dstAddrMode;
u8   dstEp;

aps_tx_options txOptions;
u8   radius;
}epInfo_t;

Code: Select all

typedef enum{
	APS_TX_OPT_SECURITY_ENABLED 	= BIT(0), //0x01 = Security enabled transmission
	APS_TX_OPT_DISABLE_NWK_KEY 		= BIT(1), //0x02 = Disable NWK key
	APS_TX_OPT_ACK_TX 				= BIT(2), //0x04 = Acknowledged transmission
	APS_TX_OPT_FRAG_PERMITTED 		= BIT(3), //0x08 = Fragmentation permitted
	APS_TX_OPT_INCLUDE_NONCE		= BIT(4), //0x10 = Include extended nonce in APS security frame
	APS_TX_OPT_UNICAST_SKIP_ROUTING	= BIT(5), //0x20 = Skip routing when unicast
	APS_TX_OPT_INTRA_PAN 			= BIT(7)  //0x80 = Intra-PAN delivery
}aps_tx_options;
Post Reply