跳转到内容

Tasmota MQTT 设置

Tasmota MQTT 设置

本节介绍如何在 Tasmota 设备上配置 MQTT 连接。学习完成后,您将能够:

  • 在 Tasmota Web UI 中配置 MQTT Broker
  • 通过控制台命令校准设备参数
  • 设置 Telemetry 周期获取实时能耗数据
  • 验证 MQTT 数据流
  • Tasmota 固件已刷写完成
  • 设备已连接 Wi-Fi 并能访问 Web UI
  • MQTT Broker 已运行且网络可达
Tasmota Web UI → Configuration → Configure MQTT
参数说明推荐值
HostBroker 地址(不含协议前缀)192.168.1.100
PortMQTT 端口1883
Client客户端 IDtasmota_socket1
UserMQTT 用户名mqtt_user
PasswordMQTT 密码********
Topic设备主题(关键参数)tasmota/socket1
Full Topic完整主题模板%prefix%/%topic%/

⚠️ 注意: 勾选 Enable MQTT 复选框后点击 Save,设备会自动重启。

配置 MQTT 之前,建议先校准设备参数:

Terminal window
# 控制台命令(取决于所在地区)
# 中国/欧洲: 230V
VoltageSet 230
# 美国/日本: 110V
VoltageSet 110
Terminal window
# 设置状态上报间隔(秒)
# 最小值通常为 10 秒
TelePeriod 10
# 验证设置
TelePeriod
# 返回: {"TelePeriod":10}
Terminal window
# 上电后继电器状态
# 0 = 保持断电 1 = 保持通电 2 = 恢复断电前状态
PowerOnState 1
Terminal window
# 0 = 关闭 LED 1 = 启用 LED 2 = 仅 Wi-Fi 状态
LedState 0

Tasmota 配置 MQTT 后自动发布到以下 Topic:

# 完整 Topic = Full Topic 模板填充
# 默认: cmnd/%topic%/ stat/%topic%/ tele/%topic%/
# 控制命令 (cmnd)
cmnd/tasmota/socket1/POWER # 发送: ON / OFF / TOGGLE
cmnd/tasmota/socket1/TelePeriod # 设置遥测周期
# 状态反馈 (stat)
stat/tasmota/socket1/POWER # 继电器状态: ON / OFF
stat/tasmota/socket1/RESULT # 命令执行结果
# 遥测数据 (tele)
tele/tasmota/socket1/STATE # 设备状态信息
tele/tasmota/socket1/SENSOR # 传感器/能耗数据 ← 核心数据
{
"Time": "2026-05-18T14:30:25",
"ESP8266": {
"RestartReason": "External"
},
"ENERGY": {
"TotalStartTime": "2026-05-18T08:00:00",
"Total": 1.452,
"Yesterday": 0.823,
"Today": 0.629,
"Period": 0.042,
"Power": 42.5,
"ApparentPower": 48.2,
"ReactivePower": 22.1,
"Factor": 0.88,
"Voltage": 223.1,
"Current": 0.216
}
}

连接到 Broker 后,应看到以下 Topic 结构:

📂 tele/
│ └── 📂 tasmota/
│ └── 📂 socket1/
│ ├── 📄 SENSOR ← 能耗数据
│ └── 📄 STATE ← 设备状态
📂 stat/
│ └── 📂 tasmota/
│ └── 📂 socket1/
│ └── 📄 POWER ← 开关状态
📂 cmnd/
└── 📂 tasmota/
└── 📂 socket1/
└── 📄 POWER ← 控制命令
Terminal window
# 订阅能耗数据
mosquitto_sub -h localhost -t "tele/tasmota/+/SENSOR" -v
# 预期输出(每 10 秒)
tele/tasmota/socket1/SENSOR {"Time":"...","ENERGY":{"Power":42.5,"Voltage":223.1,"Current":0.216,"Today":0.629}}
Terminal window
# 检查 MQTT 配置
# Tasmota Console → 输入: MqttStatus
# 返回: {"MqttStatus":0} 表示未连接
# 原因排查:
# 1. Broker 地址是否正确?
# 2. 端口是否开放?
# 3. 用户名密码是否正确?
# 4. Wi-Fi 连接是否稳定?
Terminal window
# 检查 TelePeriod 是否设置
TelePeriod
# 如果返回 0,表示遥测未启用
# 设置为 10 秒
TelePeriod 10
  • POC 演示: 10-30 秒,展示实时数据变化
  • 生产环境: 60-300 秒,降低网络和数据库负载
  • 高精度监测: 10 秒(最小间隔)

Q2: Tasmota 可以同时连接多个 Broker 吗?

Section titled “Q2: Tasmota 可以同时连接多个 Broker 吗?”

不可以。Tasmota 只支持一个 MQTT Broker 连接。如果需要数据分发,可在 Node-RED 中实现。

Q3: 如何远程控制 Tasmota 设备开关?

Section titled “Q3: 如何远程控制 Tasmota 设备开关?”

通过 MQTT 发送命令:

Terminal window
# 打开
mosquitto_pub -t "cmnd/tasmota/socket1/POWER" -m "ON"
# 关闭
mosquitto_pub -t "cmnd/tasmota/socket1/POWER" -m "OFF"
# 切换
mosquitto_pub -t "cmnd/tasmota/socket1/POWER" -m "TOGGLE"

推荐做法:

  • 使用有层次的 Topic 命名(如 tasmota/factory/line1/machine3
  • 校准电压参数以确保能耗数据准确
  • 设置合理的 TelePeriod 避免数据过于密集
  • 使用 MQTT Explorer 验证完整数据流

避免做法:

  • TelePeriod 设置过短(< 10 秒)导致网络拥塞
  • 所有设备使用相同的 Topic
  • 生产环境使用默认密码
  • 忽略电压校准导致数据偏差
  1. Tasmota MQTT 配置在 Web UI 的 Configure MQTT 页面完成
  2. TelePeriod 控制状态上报频率,最小 10 秒
  3. 能耗数据通过 tele/+/+/SENSOR Topic 获取
  4. VoltageSet 校准电压确保数据准确性
  5. cmnd / stat / tele 三层 Topic 结构清晰分离控制、状态和遥测