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 地址和端口
Gen1 MQTT Configuration
Section titled “Gen1 MQTT Configuration”Web UI 配置
Section titled “Web UI 配置”Shelly Web UI → Settings → Internet & Security → Advanced → MQTT配置参数:
| 参数 | 说明 | 示例 |
|---|---|---|
| Enable | 启用 MQTT | ✅ |
| Server | Broker 地址 | 192.168.1.100 |
| Port | MQTT 端口 | 1883 |
| Username | MQTT 用户名 | shelly_user |
| Password | MQTT 密码 | ******** |
| Topic Prefix | 主题前缀 | shelly1pm-ABC123 |
Gen1 自动状态推送
Section titled “Gen1 自动状态推送”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}Gen2 MQTT Configuration
Section titled “Gen2 MQTT Configuration”Web UI 配置
Section titled “Web UI 配置”Shelly Plus 1PM Web UI → Settings → MQTT配置参数:
| 参数 | 说明 | 示例 |
|---|---|---|
| Enable | 启用 MQTT | ✅ |
| Server | Broker 地址 | 192.168.1.100:1883 |
| Authentication | 启用认证 | ✅ |
| Username | MQTT 用户名 | shelly_user |
| Password | MQTT 密码 | ******** |
| RPC over MQTT | 启用 RPC 通信 | ✅ (推荐) |
Gen2 关键配置选项
Section titled “Gen2 关键配置选项”- Enable MQTT: 必须启用
- RPC over MQTT: 启用后可通过 MQTT 发送 RPC 命令
- Status over MQTT: 自动推送状态更新
// Gen2 启用 RPC over MQTT 后// 设备自动发布状态到:shellyplus1pm-ABC123/status/switch:0
// 接收 RPC 命令在:shellyplus1pm-ABC123/rpc
// RPC 响应发布到配置的 src Topicnodered/rpc1. 使用 MQTT Explorer 验证
Section titled “1. 使用 MQTT Explorer 验证”连接 MQTT Explorer 到 Broker,查看 Shelly 设备是否出现在 Topic 列表中:
📂 shellyplus1pm-ABC123/ ├── 📂 status/ │ ├── 📄 switch:0 ← 开关状态 │ └── 📄 devicepower ← 功率数据 └── 📂 rpc/ ← RPC 命令通道2. 使用 mosquitto_sub 验证
Section titled “2. 使用 mosquitto_sub 验证”# 订阅所有 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}}3. 检查 Web UI 连接状态
Section titled “3. 检查 Web UI 连接状态”Shelly Web UI 主页面顶部会显示 MQTT 连接状态:
- 🟢 Connected — MQTT 连接正常
- 🔴 Disconnected — MQTT 连接失败
- ⚪ Not configured — 未配置
问题 1: MQTT 状态显示 Disconnected
Section titled “问题 1: MQTT 状态显示 Disconnected”原因: Broker 地址或认证信息错误
# 步骤 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问题 2: Gen2 RPC 无响应
Section titled “问题 2: Gen2 RPC 无响应”原因: RPC over MQTT 未启用或 src Topic 配置错误
# 检查 Shelly RPC 配置# Shelly Web UI → Settings → MQTT# ✅ Enable MQTT# ✅ RPC over MQTT# ✅ Status over MQTTCommon Customer Questions
Section titled “Common Customer Questions”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 批量配置:
# 通过 API 批量配置 MQTTcurl -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 断开后的重连机制验证
Summary
Section titled “Summary”- Gen1 Shelly 通过 HTTP API 配置 MQTT,自动推送状态到
statusTopic - Gen2 Shelly 支持 RPC over MQTT,提供双向通信能力
- Topic Prefix 用于区分多设备,推荐使用有意义的命名
- MQTT Explorer 是验证 MQTT 连接的首选工具
- 配置后检查 Web UI 中的连接状态指示灯