如何配置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
相关产品推荐
相关产品推荐

