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

基于Telegraf的Shelly 3EM状态端点数据采集配置需求

Telegraf配置方案:Shelly 3EM 数据采集至 InfluxDB

核心配置思路

你提到的[[inputs.html]]是笔误,应该使用[[inputs.http]]插件请求Shelly的/status端点获取JSON数据。后续通过json_v2处理器解析JSON结构,再用starlark处理器拆分emeters数组,将每相数据映射为phase1/2/3的测量值,并使用返回的unixtime作为时间戳。

完整Telegraf配置

# 输入插件:请求Shelly 3EM的status端点
[[inputs.http]]
  urls = ["http://<你的Shelly3EM_IP>/status"]
  method = "GET"
  timeout = "5s"
  data_format = "json"

# 解析JSON数据,提取关键字段
[[processors.json_v2]]
  [[processors.json_v2.field]]
    path = "emeters"
    rename_to = "emeters"
  [[processors.json_v2.field]]
    path = "unixtime"
    rename_to = "unixtime"

# 拆分emeters数组,生成单相对应的测量值
[[processors.starlark]]
  source = '''
def apply(metric):
    # 获取全局的unixtime时间戳(秒转纳秒适配InfluxDB)
    ts = metric.fields.get("unixtime")
    if not ts:
        return []
    
    # 获取emeters三相数据
    emeters = metric.fields.get("emeters")
    if not emeters or len(emeters) < 3:
        return []
    
    metrics = []
    # 遍历三相数据,生成独立测量值
    for idx, emeter in enumerate(emeters):
        phase_name = f"phase{idx+1}"
        new_metric = metric.copy()
        new_metric.name = phase_name
        # 清空冗余字段,保留当前相的电力数据
        new_metric.fields.clear()
        for k, v in emeter.items():
            if isinstance(v, (int, float)):
                new_metric.fields[k] = v
        # 设置时间戳
        new_metric.time = int(ts * 1e9)
        metrics.append(new_metric)
    
    return metrics
'''

# 输出插件:写入InfluxDB v2(使用v1版本请替换为outputs.influxdb)
[[outputs.influxdb_v2]]
  urls = ["http://<你的InfluxDB_IP>:8086"]
  token = "<你的InfluxDB_TOKEN>"
  organization = "<你的组织名>"
  bucket = "<你的Bucket名>"

配置关键点说明

  • 替换配置中所有<占位符>为实际环境值,比如Shelly设备IP、InfluxDB连接信息。
  • starlark脚本会自动遍历emeters数组的3个元素,生成phase1/phase2/phase3三个独立测量值,每个值包含对应相的power、pf、current等数值字段。
  • 时间戳直接使用Shelly返回的unixtime,转换为纳秒级匹配InfluxDB的时间格式要求。

Docker环境调试技巧

在Synology DS720+的Docker中调试时,可通过以下方式简化排查:

  1. 挂载本地配置并启动调试模式容器:
    docker run -d \
      -v /volume1/docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf \
      --name telegraf-debug \
      telegraf:latest --debug
    
  2. 实时查看日志输出:
    docker logs -f telegraf-debug
    
  3. 测试配置输出格式:
    停止调试容器后,执行以下命令直接查看生成的InfluxDB格式数据:
    docker run --rm \
      -v /volume1/docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf \
      telegraf:latest --config /etc/telegraf/telegraf.conf --test
    

预期验证结果

测试输出应符合你要求的格式,示例如下:

> phase1 power=59.25,pf=0.58,current=0.44,voltage=233.62,total=80595.1,total_returned=215.4 1685636832000000000
> phase2 power=67.61,pf=0.26,current=1.12,voltage=232.00,total=213500.9,total_returned=92953.7 1685636832000000000
> phase3 power=3.36,pf=0.05,current=0.30,voltage=233.77,total=113106.8,total_returned=1469.6 1685636832000000000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:07:49