You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义时间戳向ThingsBoard发送能耗数据?

针对你要把历史账单能耗数据带自定义时间戳传到ThingsBoard做对比的需求,整理了之前两种方法的修正方案和排查点:

解决ThingsBoard自定义时间戳上传历史能耗数据的问题

一、API Post方法的修正方案

你用Swagger调用Post遥测接口时,大概率没踩中时间戳格式要求的关键点:ThingsBoard要求时间戳必须是毫秒级Unix时间戳(数字类型,不能是字符串或秒级时间戳)。

正确请求示例

  • 请求地址:POST /api/v1/{deviceToken}/telemetry
  • 请求头:Content-Type: application/json
  • 请求体必须明确指定ts(时间戳)和values字段:
{
  "ts": 1609459200000, // 对应2021-01-01 00:00:00的毫秒级时间戳
  "values": {
    "energy_consumption": 123.5 // 账单能耗值,需和现有遥测字段名、单位完全统一
  }
}

常见排查点

  • 设备Token必须用设备详情页的访问令牌,不是设备ID
  • 时间戳不能加引号,必须是纯数字,否则会被默认替换为当前时间
  • 遥测字段名要和换窗后的数据字段完全一致,否则无法在同一张图表对比

二、CSV导入的正确姿势

CSV导入失败通常是时间列格式或字段映射错误:

规范CSV格式示例

ts,energy_consumption
1609459200000,123.5
1612137600000,118.2

导入注意事项

  1. 导入时选择历史数据导入模式,不要选实时数据
  2. 时间列必须指定为Unix毫秒时间戳格式;如果账单是日期字符串,用Excel公式转换成毫秒时间戳:=(A2-"1970-01-01")*86400000
  3. 字段映射要严格对应:CSV列名和设备遥测键必须完全匹配

三、数据验证与对比

上传完成后,在ThingsBoard的时间序列图表里操作:

  • 选择设备的目标能耗字段
  • 设置时间范围覆盖换窗前后的所有数据
  • 添加垂直参考线标记换窗日期,直观对比能耗差异

四、批量上传脚本(可选)

如果账单数据量较大,用Python脚本批量上传更高效:

import requests
import csv

# 替换成你的设备Token和ThingsBoard地址
DEVICE_TOKEN = "your_device_token_here"
API_URL = f"https://your-thingsboard-instance/api/v1/{DEVICE_TOKEN}/telemetry"

with open('billing_energy_data.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        payload = {
            "ts": int(row['ts']),
            "values": {"energy_consumption": float(row['energy_consumption'])}
        }
        response = requests.post(API_URL, json=payload)
        if response.status_code == 200:
            print(f"成功上传时间戳{row['ts']}的数据")
        else:
            print(f"上传失败[{response.status_code}]:{response.text}")

内容的提问来源于stack exchange,提问作者Julia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 18:05:04