593
社区成员
发帖
与我相关
我的任务
分享
关于涂鸦智能zigbee模组二次开发求助
使用芯科的zigbee模块,涂鸦封装成TYZS 使用他们的sdk二次开发,在他们switch基础上开发,
zigbee 配置是什么类型的的设备,对收发数据是否有影响
其中代码有一段是这样描述
const attr_t g_group_attr_list[] = {
GROUP_ATTR_LIST
};
const attr_t g_scene_attr_list[] = {
SCENE_ATTR_LIST
};
#define ON_OFF_PRIVATE_ATTR_LIST \
{ 0x0000, ATTR_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTR_MASK_TOKEN_FAST), (uint8_t*)0x00 }, \
const attr_t g_light_attr_list[] = {
ON_OFF_PRIVATE_ATTR_LIST
};
const cluster_t g_server_cluster_id[] = {
DEF_CLUSTER_GROUPS_CLUSTER_ID(g_group_attr_list)
DEF_CLUSTER_SCENES_CLUSTER_ID(g_scene_attr_list)
DEF_CLUSTER_ON_OFF_CLUSTER_ID(g_light_attr_list)
};
#define SERVER_CLUSTER_LEN get_array_len(g_server_cluster_id)
/**
* @note 代表一个ON_OFF_LIGHT 设备,1个endpoint,
* 支持 Server端 group、scene、onoff cluster。
* 分别支持GROUP_ATTR_LIST、SCENE_ATTR_LIST、ON_OFF_PRIVATE_ATTR_LIST属性
*/
const dev_description_t g_dev_des[] = {
{ 0x01, ZHA_PROFILE_ID, ZG_DEVICE_ID_ON_OFF_LIGHT, SERVER_CLUSTER_LEN, (cluster_t *)&g_server_cluster_id[0], 0, NULL},
};
/**
* @note 描述是一个什么设备,多少 endpoint,每个 endpoint 有什么 cluster 和 attributes。
*/
dev_register_zg_ep_infor((dev_description_t *)g_dev_des, EP_SUMS);
按照代码添加了属性,编译了代码,把设备id换成自己的id,配网成功,界面是自己的,但除代码原来配置的开关属性能正常收发,自己配置的功能点无法上报和下发
数据接收代码如下
ZCL_CMD_RET_T dev_msg_recv_callback(dev_msg_t *dev_msg)
{
ZCL_CMD_RET_T result = ZCL_CMD_RET_SUCCESS;
switch (dev_msg->cluster) {
case CLUSTER_PRIVATE_TUYA_CLUSTER_ID: { // 私有数据处理
uint8_t len = dev_msg->data.bare_data.len;
uint8_t *data = dev_msg->data.bare_data.data;
//TODO: 私有协议处理
break;
}
// 标准数据处理
case CLUSTER_ON_OFF_CLUSTER_ID: {
attr_value_t *attr_list = dev_msg->data.attr_data.attr_value;
uint8_t attr_sums = dev_msg->data.attr_data.attr_value_sums;
uint8_t i;
for(i=0; i<attr_sums; i++) {
switch(attr_list[i].cmd) {
case CMD_OFF_COMMAND_ID: {
//TODO:关命令
break;
}
case CMD_ON_COMMAND_ID: {
//TODO:开命令
break;
}
case CMD_TOGGLE_COMMAND_ID: {
//TODO:取反命令
break;
}
default: {
break;
}
}
break;
}
}
default:
// Unrecognized cluster ID, error status will apply.
break;
}
return result;
}
发送代码如下
static void __send_result_cb(SEND_ST_T st, dev_send_data_t *msg)
{
switch(st) {
case SEND_ST_OK: {
//TODO: 发送成功
break;
}
default: {
//TODO: 发送失败
break;
}
}
}
static void send_data_demo(void)
{
dev_send_data_t send_data;
memset(&send_data, 0, sizeof(dev_send_data_t));
send_data.zcl_id = 0; ///< 用户自定义 id,发送成功失败回调会传回该参数
send_data.qos = QOS_1; // /< 如果没有收到ACK,会重传
send_data.direction = ZCL_DATA_DIRECTION_SERVER_TO_CLIENT;
send_data.command_id = CMD_REPORT_ATTRIBUTES_COMMAND_ID; ///< 通用上报属性的命令
send_data.addr.mode = SEND_MODE_GW; ///< 发送给网关
send_data.addr.type.gw.cluster_id = CLUSTER_ON_OFF_CLUSTER_ID; // /< 开关属性
send_data.addr.type.gw.src_ep = 1; // /< 设备 endpoint
send_data.delay_time = 0; ///< 延时发送时间
send_data.random_time = 0; ///< 随机发送时间范围
send_data.data.zg.attr_sum = 1; ///< 上报属性的个数
send_data.data.zg.attr[0].attr_id = ATTR_ON_OFF_ATTRIBUTE_ID; // /< 开光状态属性
send_data.data.zg.attr[0].type = ATTR_BOOLEAN_ATTRIBUTE_TYPE; // /< 属性数据类型
send_data.data.zg.attr[0].value_size = 1; ///< 属性数据长度
send_data.data.zg.attr[0].value[0] = 1; // /< 1代表开,0代表关状态
dev_zigbee_send_data(&send_data, __send_result_cb, 1000); // /< 发送,1000代表报文最大重传持续时间是1秒
}
自己在网站配置如下
除了 PDIP 为 1 的 开关 属性 能正常收发 其他属性都无法收发
是哪里配置错了
下载的例程基本没怎么改,就加入串口打印信息,
涂鸦接入规范https://developer.tuya.com/cn/docs/iot/access-standard-zigbee?id=Kaiuyf28lqebl
在线求解,