【已解决】自定义cluster发送失败,求助什么原因?

Zigbee 子设备开发


叶苹果
Posts: 18

代码如下:

Dingtalk_20230309205938.jpg
Dingtalk_20230309210057.jpg

config文件:(因为做的人体存在的项目,看帖子把MODEL_ID改为TS0225后就不能配网了,改回来TS0202配网就可发现设备了,这个有大神知道是什么原因吗?)

Dingtalk_20230309210255.jpg

抓包文件如下:

Dingtalk_20230309210818.jpg

涂鸦后台查看设备只有上下线记录。
求助自定义cluster发送不成功是什么原因导致的?

iot_man
Posts: 60

Re: 自定义cluster发送失败,求助什么原因?

Zigbee自定义的数据上报,需要网关做协议转换,转换成tuya通用的dp数据上报。
首先确认你是否已经有dp可以接纳zigbee的数据?

iot_man
Posts: 60

Re: 自定义cluster发送失败,求助什么原因?

人体传感器的有人无人的数据,tuya已经有标准dp,可以参考:https://developer.tuya.com/cn/docs/iot/ ... k6zvn49x5m

叶苹果
Posts: 18

Re: 自定义cluster发送失败,求助什么原因?

iot_man 2023年 Mar 10日 15:57

Zigbee自定义的数据上报,需要网关做协议转换,转换成tuya通用的dp数据上报。
首先确认你是否已经有dp可以接纳zigbee的数据?

能否给个具体的自定义数据上传的例程呢?

zeso
Posts: 132

Re: 自定义cluster发送失败,求助什么原因?

你好.

Q1:把MODEL_ID改为TS0225后就不能配网了,改回来TS0202配网就可发现设备了

A1:WindIDE拉取下来MG21最新版本(3.6.1)开发包,强电设备demo用你的pid以及这两个mode ID都是可以配网成功的,请问在demo的基础之上,还修改了哪些地方?

Code: Select all

{
	"firmwareInfo": {
		"description": "this is a demon project",
		"dev_role":"router",
		"image_type":"0x1602",
		"manufacture_id":"0x1002",
		"model_id":"TS0225",
		"pid": "ttsq6wfc",
		"manufacture_name": "_TZ3210_",
		"module_name":"ZSU",
		"chip_id":"efr32mg21a020f768im32"
	}
}

![](https://images.tuyacn.com/fe-static/doc ... 8b9622.png)

![](https://images.tuyacn.com/fe-static/doc ... 709709.jpg)

Q2:发送自定义DP数据失败

A2:自定义接入涂鸦规范文档可以参考:[自定义dp接入文档](https://www.tuyaos.com/viewtopic.php?t=801)

结合你的代码可以修改如下(以上报DP ID =102 无人判断时间)为例:

1.注册endpoint时,需要增加注册一个走涂鸦透传通道的cluster,Cluster ID=0xEF00;

2.请详细阅读写上述文档中的协议部分,上行组帧及下行解析需严格按协议格式;

Code: Select all

//private dp
void dev_dpid_msg_rsp(TAL_SEND_QOS_E qos, USHORT_T delay_ms,UINT8_T *data,UINT8_T len)
{
    TAL_ZG_SEND_DATA_T send_data;
    tal_system_memset(&send_data, 0, sizeof(TAL_ZG_SEND_DATA_T));
    send_data.zcl_id = 0;//++zcl_seq;
    send_data.qos = qos;
    send_data.frame_type = ZG_ZCL_FRAME_TYPE_SPEC_TO_CLUSTER;
    send_data.direction = ZG_ZCL_DATA_SERVER_TO_CLIENT;
    send_data.command_id = 0x05;//TY_MODULE_DATA_RESPONE
    send_data.addr.mode = SEND_MODE_DEV;
    send_data.addr.type.dev.cluster_id = CLUSTER_PRIVATE_TUYA_CLUSTER_ID;
    send_data.addr.type.dev.src_ep = 1;
    send_data.delay_time = delay_ms;
    send_data.random_time = 0;
    send_data.data.private.len = len;
    tal_system_memcpy((send_data.data.private.data),data,len);
    tal_zg_send_data(&send_data, NULL, 3000);
}
void dev_dpid_msg_report(TAL_SEND_QOS_E qos, USHORT_T delay_ms,UINT8_T *data,UINT8_T len)
{
    TAL_ZG_SEND_DATA_T send_data;
    tal_system_memset(&send_data, 0, sizeof(TAL_ZG_SEND_DATA_T));
    send_data.zcl_id = 1;//++zcl_seq;
    send_data.qos = qos;
    send_data.frame_type = ZG_ZCL_FRAME_TYPE_SPEC_TO_CLUSTER;
    send_data.direction = ZG_ZCL_DATA_SERVER_TO_CLIENT;
    send_data.command_id = 0x06; // TY_MODULE_DATA_REPORT

    send_data.addr.mode = SEND_MODE_DEV;
    send_data.addr.type.dev.dst_addr = TUYA_GATEWAY_ADDRESS;
    send_data.addr.type.dev.dst_ep = 0x01;
    send_data.addr.type.dev.src_ep = TUYA_PRIMARY_ENDPOINT;
    send_data.addr.type.dev.cluster_id = CLUSTER_PRIVATE_TUYA_CLUSTER_ID;

    send_data.delay_time = delay_ms;
    send_data.random_time = 0;
    send_data.data.private.len = len;
    tal_system_memcpy((send_data.data.private.data),data,len);
    tal_zg_send_data(&send_data, NULL, 3000);
}

void dev_dpid_value_report(USHORT_T time)
{
   UINT8_T buffer[20];
   buffer[0] = 0x00;//seq
   buffer[1] = 0x01;//seq
   buffer[2] = 102;//dp
   buffer[3] = 0x02;//type int
   buffer[4] = 0x00;//len
   buffer[5] = 0x04;//len
   buffer[6] = 0;
   buffer[7] = 0;
   buffer[8] = time>>8;
   buffer[9] = time>>0;
   dev_dpid_msg_report(QOS_1,0,buffer,10);
}

/*
when trigger report, call dev_dpid_value_report,for example:
UINT16_T time=100;
dev_dpid_value_report(time);
*/

![](https://images.tuyacn.com/fe-static/doc ... af00ac.png)

![](https://images.tuyacn.com/fe-static/doc ... a28f25.png)

完整参考代码如附件。

Attachments
tuya_sdk_callback.c
(25.91 KiB) Downloaded 79 times

我的栈溢不出。

叶苹果
Posts: 18

Re: 自定义cluster发送失败,求助什么原因?

Dingtalk_20230314185555.jpg

按照你们给的demo代码我重新在vscode的TUYA IDE上重新下载工程,然后插入你们的代码,依然不能上报自定义透传通道的cluster。

我的整个工程放在了附件中,麻烦帮忙看看!

Attachments
tuyaos_demo_zg_light2.zip
(15.34 MiB) Downloaded 66 times
叶苹果
Posts: 18

Re: 自定义cluster发送失败,求助什么原因?

自定义无人判断时间数据下发也有问题。配网成功后,APP操作该DP(102),抓包器无法抓到网关的包,设备也无法进入tal_zcl_specific_msg_recv_callback回调。我们怎么样定位是app插件的问题,还是设备端固件的问题呢?

zeso
Posts: 132

Re: 自定义cluster发送失败,求助什么原因?

你好,两个问题:
1,app_config.json中配置的时sleep_end_dev,但是tal_zg_node_config接口配置的却是router设备,需要修改;
2,上报dp点数据时,需严格按照IoT平台,产品-》功能定义页面中DP的类型,取值范围等参数一一对应,附件工程中,dp的取值范围是30-10000。
排除上述问题后,设备配网成功,可在日志平台看到自定义数据log。

我的栈溢不出。

叶苹果
Posts: 18

Re: 自定义cluster发送失败,求助什么原因?

Image
如图修改node_type为ZG_SLEEPY_END_DEVICE后就无法配网成功,是还有其它参数需要修改吗?

Attachments
Dingtalk_20230315094341.jpg
zeso
Posts: 132

Re: 自定义cluster发送失败,求助什么原因?

低功耗设备的配置,请参考tuyaos_demo_zg_door_sensor这个demo。

我的栈溢不出。

Post Reply