批量 DP 上报

更新时间:2024-07-18 07:54:36下载pdf

TuyaOS 支持批量数据点(Data Point,DP)上报功能,该功能将多个子设备的 DP 数据一次性地上报到云平台,以便满足大规模设备状态同步的需求。

本文介绍 TuyaOS 批量 DP 上报的 API 接口,并且提供了示例代码片段,以便展示如何正确地使用该功能。

接口描述

数据上报

/**
 * @brief 异步发送数据到云平台
 *
 * @param[in] pro      协议标识符,对于批量 DP 上报,应设置为 30。
 * @param[in] data     JSON 格式的数据字符串,批量 DP 上报的示例格式:[{"cid": "aaaa", "dps": {"1": true}}, ...]。
 * @param[in] qos      MQTT 质量服务等级,推荐使用 1,以确保数据传输的可靠性。
 * @param[in] to_lmt   超时时间(秒),如果超过此时间未收到确认,则视为超时。
 * @param[in] cb       完成异步操作后调用的回调函数。
 * @param[in] prv_data 回调函数的上下文数据,可用于存储额外的信息。
 *
 * @return OPRT_OK 表示成功,其他值表示错误。错误码定义请参考 tuya_error_code.h
 */
OPERATE_RET mqc_prot_data_rept_seq(IN CONST UINT_T pro, IN CONST CHAR_T *data,
                                   IN CONST BYTE_T qos, IN CONST UINT_T to_lmt,
                                   IN CONST MQ_PUB_ASYNC_IFM_CB cb, IN VOID *prv_data);

示例代码

STATIC VOID __mqc_pub_cb(IN CONST OPERATE_RET op_ret,IN CONST VOID *prv_data)
{
    PR_DEBUG("mqtt publish result: %d", op_ret);

    if (op_ret == OPRT_OK) { // success
        // TODO
    } else {                 // timeout
        // TODO
    }
}

STATIC VOID __dp_report_batch_example(VOID)
{
    OPERATE_RET op_ret = OPRT_OK;
    CONST CHAR_T *data = "[ \
        {\"cid\": \"aaaa\", \"dps\": {\"1\": true, \"2\": true}}, \
        {\"cid\": \"bbbb\", \"dps\": {\"1\": true, \"2\": true}} \
    ]";

    op_ret = mqc_prot_data_rept_seq(30, data, 1, 10, __mqc_pub_cb, NULL);
    if (op_ret != OPRT_OK) {
        PR_ERR("mqc_prot_data_rept_seq err: %d", op_ret);
        return;
    }
}