【已解决】自定义cluster发送失败,求助什么原因?
代码如下:
config文件:(因为做的人体存在的项目,看帖子把MODEL_ID改为TS0225后就不能配网了,改回来TS0202配网就可发现设备了,这个有大神知道是什么原因吗?)
抓包文件如下:
涂鸦后台查看设备只有上下线记录。
求助自定义cluster发送不成功是什么原因导致的?
代码如下:
config文件:(因为做的人体存在的项目,看帖子把MODEL_ID改为TS0225后就不能配网了,改回来TS0202配网就可发现设备了,这个有大神知道是什么原因吗?)
抓包文件如下:
涂鸦后台查看设备只有上下线记录。
求助自定义cluster发送不成功是什么原因导致的?
Zigbee自定义的数据上报,需要网关做协议转换,转换成tuya通用的dp数据上报。
首先确认你是否已经有dp可以接纳zigbee的数据?
人体传感器的有人无人的数据,tuya已经有标准dp,可以参考:https://developer.tuya.com/cn/docs/iot/ ... k6zvn49x5m
能否给个具体的自定义数据上传的例程呢?
你好.
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)
完整参考代码如附件。
按照你们给的demo代码我重新在vscode的TUYA IDE上重新下载工程,然后插入你们的代码,依然不能上报自定义透传通道的cluster。
我的整个工程放在了附件中,麻烦帮忙看看!
自定义无人判断时间数据下发也有问题。配网成功后,APP操作该DP(102),抓包器无法抓到网关的包,设备也无法进入tal_zcl_specific_msg_recv_callback回调。我们怎么样定位是app插件的问题,还是设备端固件的问题呢?
你好,两个问题:
1,app_config.json中配置的时sleep_end_dev,但是tal_zg_node_config接口配置的却是router设备,需要修改;
2,上报dp点数据时,需严格按照IoT平台,产品-》功能定义页面中DP的类型,取值范围等参数一一对应,附件工程中,dp的取值范围是30-10000。
排除上述问题后,设备配网成功,可在日志平台看到自定义数据log。
如图修改node_type为ZG_SLEEPY_END_DEVICE后就无法配网成功,是还有其它参数需要修改吗?
低功耗设备的配置,请参考tuyaos_demo_zg_door_sensor这个demo。