Zigbee 数据发送

更新时间:2022-11-24 09:20:26下载pdf

以下示例会发送一个属性值给网关:

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秒
}