跳转到内容

Shelly MQTT 配置

Shelly MQTT 配置

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

  • 在 Shelly Web UI 中配置 MQTT Broker 连接
  • 配置 Gen1 和 Gen2 的 MQTT 参数
  • 验证 MQTT 连接状态
  • 向客户演示 Shelly MQTT 配置流程
  • Shelly 设备已上电并连接到 Wi-Fi
  • MQTT Broker (Mosquitto/EMQX) 已运行
  • 知晓 Broker 的 IP 地址和端口
Shelly Web UI → Settings → Internet & Security → Advanced → MQTT

配置参数:

参数说明示例
Enable启用 MQTT
ServerBroker 地址192.168.1.100
PortMQTT 端口1883
UsernameMQTT 用户名shelly_user
PasswordMQTT 密码********
Topic Prefix主题前缀shelly1pm-ABC123

Gen1 设备配置 MQTT 后会自动推送状态信息:

# 设备状态 (每 30 秒)
shelly1pm-ABC123/status
> {"relays":[{"ison":false}],"meters":[{"power":0.0,"overpower":0.0,"is_valid":true,"timestamp":1694321234,"counters":[0.0,0.0],"total":123}]}
# 继电器状态变化
shelly1pm-ABC123/relay/0
> {"ison":true}
Shelly Plus 1PM Web UI → Settings → MQTT

配置参数:

参数说明示例
Enable启用 MQTT
ServerBroker 地址192.168.1.100:1883
Authentication启用认证
UsernameMQTT 用户名shelly_user
PasswordMQTT 密码********
RPC over MQTT启用 RPC 通信✅ (推荐)
  1. Enable MQTT: 必须启用
  2. RPC over MQTT: 启用后可通过 MQTT 发送 RPC 命令
  3. Status over MQTT: 自动推送状态更新
// Gen2 启用 RPC over MQTT 后
// 设备自动发布状态到:
shellyplus1pm-ABC123/status/switch:0
// 接收 RPC 命令在:
shellyplus1pm-ABC123/rpc
// RPC 响应发布到配置的 src Topic
nodered/rpc

连接 MQTT Explorer 到 Broker,查看 Shelly 设备是否出现在 Topic 列表中:

📂 shellyplus1pm-ABC123/
├── 📂 status/
│ ├── 📄 switch:0 ← 开关状态
│ └── 📄 devicepower ← 功率数据
└── 📂 rpc/ ← RPC 命令通道
Terminal window
# 订阅所有 Shelly 主题
mosquitto_sub -h localhost -p 1883 \
-u "shelly_user" -P "password" \
-t "shelly+/#" -v
# 预期输出(每 30 秒)
shellyplus1pm-ABC123/status/switch:0 {"id":0,"output":true,"temperature":{"tC":42.5}}

Shelly Web UI 主页面顶部会显示 MQTT 连接状态:

  • 🟢 Connected — MQTT 连接正常
  • 🔴 Disconnected — MQTT 连接失败
  • Not configured — 未配置

原因: Broker 地址或认证信息错误

Terminal window
# 步骤 1: 检查 Broker 是否运行
docker ps | grep mosquitto
# 步骤 2: 测试 Broker 连通性
telnet 192.168.1.100 1883
# 步骤 3: 检查 Shelly Wi-Fi 连接
# Shelly Web UI → Settings → Wi-Fi → Status

原因: RPC over MQTT 未启用或 src Topic 配置错误

Terminal window
# 检查 Shelly RPC 配置
# Shelly Web UI → Settings → MQTT
# ✅ Enable MQTT
# ✅ RPC over MQTT
# ✅ Status over MQTT

Q1: 配置 MQTT 后原有的 HTTP API 还能用吗?

Section titled “Q1: 配置 MQTT 后原有的 HTTP API 还能用吗?”

可以。MQTT 和 HTTP API 可以并存,互不影响。HTTP 适合一次性查询,MQTT 适合持续监控和自动化。

Q2: Shelly 的 Topic Prefix 有什么作用?

Section titled “Q2: Shelly 的 Topic Prefix 有什么作用?”

Topic Prefix 用于区分同一网络中的多个 Shelly 设备。推荐使用设备 ID 或位置名作为前缀,如 factory-line1-motor

Q3: 如何在大量设备部署时批量配置 MQTT?

Section titled “Q3: 如何在大量设备部署时批量配置 MQTT?”

Shelly 支持通过 HTTP API 批量配置:

Terminal window
# 通过 API 批量配置 MQTT
curl -X POST http://shelly-ip/settings \
-d '{"mqtt":{"enable":true,"server":"192.168.1.100:1883","user":"shelly_user","pass":"password"}}'

推荐做法:

  • Gen2 设备启用 RPC over MQTT 以获得完整功能
  • 使用有意义的 Topic Prefix(如 factory-line1-shelly1pm
  • MQTT 连接配置用户名和密码认证
  • 部署前验证 MQTT 连接状态

避免做法:

  • 同一网络中的 Shelly 使用相同 Topic Prefix
  • 生产环境使用匿名 MQTT 连接
  • 在 Wi-Fi 信号弱的位置部署 Shelly
  • 忽略 MQTT 断开后的重连机制验证
  1. Gen1 Shelly 通过 HTTP API 配置 MQTT,自动推送状态到 status Topic
  2. Gen2 Shelly 支持 RPC over MQTT,提供双向通信能力
  3. Topic Prefix 用于区分多设备,推荐使用有意义的命名
  4. MQTT Explorer 是验证 MQTT 连接的首选工具
  5. 配置后检查 Web UI 中的连接状态指示灯