基于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中调试时,可通过以下方式简化排查:
- 挂载本地配置并启动调试模式容器:
docker run -d \ -v /volume1/docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf \ --name telegraf-debug \ telegraf:latest --debug - 实时查看日志输出:
docker logs -f telegraf-debug - 测试配置输出格式:
停止调试容器后,执行以下命令直接查看生成的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
相关产品推荐
相关产品推荐

