涂鸦zigbee_sdk疑问

hamshop 2021-09-25 22:33:08

关于涂鸦智能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

在线求解,

...全文
202 点赞 收藏 1
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ByteHouse 导师 09-26
  1. 这种情况要分开分析,
    a. 抓取ZigBee无线报文,看看设备有没有真的report数据出去。
    b. ZigBee协调器有没有把数据给到WiFI部分。
    c. WiFi有没有把数据给到云平台。
  2. 你的设备ID修改后,网关是否不认识这钟类型的设备。
  3. 端点是不是正确的通信端点。
回复
发帖
ZigBee
创建于2021-07-30

91

社区成员

ZigBee技术交流社区
帖子事件
创建了帖子
2021-09-25 22:33
社区公告

ZigBee技术交流社区说明

  • ZigBee技术学习官网:www.sxf-iot.com
  • 关注微信公众号了解更多IoT行业资讯:shanxuefang-iot
  • 如何提问技术问题:点击了解
  • 可加版主好友:825801494(微),备注【入群】进入爱好者交流群

善学坊IoT学习平台