跳到主要内容

如何将多个时间序列数据点批量放入一条 MQTT 消息?

手动构建 JSON 有效载荷并通过 MQTT 直接发布。这样可以避免多次调用 esp_rmaker_param_update_and_report 带来的开销。

有效载荷格式(示例:设备 EnergyTsData,参数 A、B、C、D,每个参数 3 条记录,间隔 60 秒):

{
"ts_data_version": "2021-09-13",
"ts_data": [
{
"name": "EnergyTsData.A",
"dt": "float",
"records": [
{"t": 1678782905, "v": 768.0},
{"t": 1678782965, "v": 768.0},
{"t": 1678783025, "v": 768.0}
]
}
]
}
  • name:<DeviceName>.<ParameterName>
  • dt:数据类型("float"、"int"、"string" 等)
  • t:数据生成时的 Unix 时间戳
  • v:数据值

发布到云端:

esp_err_t esp_rainmaker_report_ts_data(char *buf, size_t buf_size)
{
char publish_topic[150] = {0};
esp_rmaker_create_mqtt_topic(publish_topic, sizeof(publish_topic),
"tsdata", "esp_ts_ingest");
return esp_rmaker_mqtt_publish(publish_topic, buf, buf_size, RMAKER_MQTT_QOS1, NULL);
}

使用此方法时,参数不需要 PROP_FLAG_TIME_SERIES——上报完全由应用程序控制。