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

如何配置Telegraf将ESP8266发送的MQTT数据写入InfluxDB?

解决ESP8266浮点MQTT数据写入InfluxDB的Telegraf配置方案

我完全懂你的需求——用Python脚本能实现但总不如Telegraf这种专业工具省心,刚好给你一套针对性的配置示例,分两种常见的ESP数据发送场景来写,你直接对应自己的情况改就行:

先确认前提

你已经搞定了Telegraf写入系统信息到InfluxDB,那[[outputs.influxdb]]的基础配置应该没问题,下面重点讲MQTT输入插件的配置。


场景1:ESP8266发送JSON格式的浮点数据(推荐,支持多字段)

这种场景下ESP会把多个传感器数据打包成JSON发送,比如温度、湿度一起发,Telegraf能直接解析成InfluxDB的字段。

ESP8266发布示例(Arduino代码片段)

// 模拟浮点数据
float sensorTemp = 26.3;
float sensorHumid = 58.7;
// 组装JSON payload
String payload = "{\"temperature\": " + String(sensorTemp) + ", \"humidity\": " + String(sensorHumid) + "}";
// 发布到指定MQTT主题
client.publish("esp8266/env_sensor", payload.c_str());

对应的Telegraf配置片段

把这段加到你的telegraf.conf里:

[[inputs.mqtt_consumer]]
  # MQTT代理地址,本地mosquitto就用localhost,远程的换对应IP
  servers = ["tcp://localhost:1883"]
  # 订阅ESP发布的主题,和上面代码里的一致
  topics = ["esp8266/env_sensor"]
  # MQTT QoS等级,按需选0/1/2
  qos = 0
  # 如果你的MQTT开启了认证,填用户名和密码,没开就留空
  username = ""
  password = ""
  # 指定数据格式为JSON,Telegraf会自动解析里面的字段
  data_format = "json"
  # 如果需要把某个JSON字段当成InfluxDB的tag(比如传感器ID),在这里添加,比如tag_keys = ["sensor_id"]
  tag_keys = []

# 你的InfluxDB输出配置应该已经有了,这里再确认下关键项
[[outputs.influxdb]]
  urls = ["http://localhost:8086"]
  # 要写入的数据库名,提前在InfluxDB创建好,或者开skip_database_creation让Telegraf自动建
  database = "sensor_data"
  retention_policy = "autogen"
  timeout = "5s"
  skip_database_creation = false

场景2:ESP8266发送纯浮点数值(单字段场景)

如果ESP只发单个浮点值(比如只发温度),需要告诉Telegraf把收到的字符串解析成浮点型,不然会被当成字符串存储,Grafana里没法正常绘图。

ESP8266发布示例(Arduino代码片段)

float sensorTemp = 26.3;
// 直接把浮点值转成字符串发布
client.publish("esp8266/temperature", String(sensorTemp).c_str());

对应的Telegraf配置片段

[[inputs.mqtt_consumer]]
  servers = ["tcp://localhost:1883"]
  topics = ["esp8266/temperature"]
  qos = 0
  # 指定数据格式为纯值
  data_format = "value"
  # 重点!告诉Telegraf解析成浮点型,这是你之前可能漏掉的关键配置
  data_type = "float"
  # 给这个指标起个自定义名字,方便在InfluxDB和Grafana里识别
  name_override = "room_temperature"

[[outputs.influxdb]]
  urls = ["http://localhost:8086"]
  database = "sensor_data"
  retention_policy = "autogen"

排查验证技巧

配置完别忘做这几步确认:

  • 测试Telegraf配置:运行telegraf --config /etc/telegraf/telegraf.conf --test,看输出里有没有采集到MQTT的浮点数据
  • 查看Telegraf日志:用journalctl -u telegraf -f实时看日志,排查有没有MQTT连接失败、数据解析错误的提示
  • 验证MQTT数据:用mosquitto_sub -t "esp8266/#"订阅所有ESP相关主题,确认ESP确实在发送数据
  • 检查InfluxDB数据:登录InfluxDB客户端,执行USE sensor_data; SELECT * FROM room_temperature;(对应场景2的表名),看有没有数据写入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:08:35