thingsboard/summary/24-MQTT规则节点检查指南.md

268 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MQTT 规则节点检查指南
## 问题分析
根据日志分析,发现以下情况:
1. **消息处理流程**
- 设备数据正常进入规则链
- 消息在 `Save Timeseries` 节点处被处理
- **但没有继续到 MQTT 节点**
2. **日志显示**
```
Last Rule Node: [RuleChain: Root Rule Chain|RuleNode: Save Timeseries(64ebb5c0-b857-11f0-b3fb-3333a2767a21)]
```
- 所有消息都在 `Save Timeseries` 节点停止
- 没有看到 MQTT 节点相关的日志
3. **可能的原因**
- MQTT 节点没有正确连接到 Save Timeseries 节点的输出
- MQTT 节点配置错误host、port、credentials 等)
- MQTT 节点初始化失败但没有记录错误
- 规则链连接配置问题
---
## 检查步骤
### 1. 检查规则链配置Web UI
1. **登录 ThingsBoard Web UI**
- 访问:`http://localhost:8080`
- 使用管理员账号登录
2. **检查 Root Rule Chain**
- 进入:`Rule Chains` → `Root Rule Chain`
- 查看节点列表:
- 确认是否有 MQTT 节点
- 查看 MQTT 节点的配置
3. **检查节点连接**
- 在规则链编辑器中,检查:
- `Save Timeseries` 节点是否有输出连接到 MQTT 节点
- 连接类型应该是 `Success`(绿色箭头)
- **常见问题**
- 节点没有连接
- 连接到了错误的路由(如 `Failure` 而不是 `Success`
### 2. 检查 MQTT 节点配置
**必需的配置项**
- **Host**: MQTT Broker 地址(如 `localhost`、`mqtt.example.com`
- **Port**: MQTT Broker 端口(如 `1883`、`8883`
- **Topic Pattern**: MQTT 主题模式(如 `tb/telemetry/${deviceName}`
- **Credentials**: 认证信息(如果 MQTT Broker 需要认证)
**检查方法**
1. 在规则链编辑器中,点击 MQTT 节点
2. 查看配置面板
3. 确认所有必需字段都已填写
### 3. 检查日志中的错误信息
**查看 MQTT 节点初始化错误**
```bash
docker logs mytb 2>&1 | grep -i "mqtt.*node\|mqtt.*init\|mqtt.*connect\|mqtt.*broker" | tail -50
```
**查看规则链相关错误**
```bash
docker logs mytb 2>&1 | grep -i "rule.*node.*error\|rule.*chain.*error\|external.*node" | tail -50
```
**查看连接失败错误**
```bash
docker logs mytb 2>&1 | grep -i "failed to connect\|connection.*refused\|timeout" | tail -50
```
### 4. 测试 MQTT Broker 连接
**检查 MQTT Broker 是否可访问**
```bash
# 如果 MQTT Broker 在本地
nc -zv localhost 1883
# 如果 MQTT Broker 在其他服务器
nc -zv mqtt.example.com 1883
```
**使用 mosquitto 客户端测试**
```bash
# 测试连接
mosquitto_pub -h <mqtt-broker-host> -p <port> -t "test/topic" -m "test message"
```
---
## 常见问题及解决方案
### 问题 1MQTT 节点没有连接到 Save Timeseries 节点
**症状**
- 日志显示消息在 Save Timeseries 节点停止
- 没有 MQTT 节点处理日志
**解决方案**
1. 在规则链编辑器中,从 `Save Timeseries` 节点拖出连接线
2. 连接到 MQTT 节点
3. 确保连接类型是 `Success`(不是 `Failure`
4. 保存规则链
### 问题 2MQTT Broker 连接失败
**症状**
- 日志中可能有连接错误(如果日志级别足够详细)
- MQTT 节点初始化失败
**解决方案**
1. **检查 MQTT Broker 地址和端口**
- 确认 Host 和 Port 配置正确
- 测试网络连接性
2. **检查认证信息**
- 如果 MQTT Broker 需要用户名密码,确保配置正确
- 检查 SSL/TLS 配置(如果需要)
3. **检查防火墙**
- 确保 ThingsBoard 容器可以访问 MQTT Broker
- 检查端口是否开放
### 问题 3MQTT 节点配置错误
**症状**
- Topic Pattern 配置错误
- 消息格式不正确
**解决方案**
1. **检查 Topic Pattern**
- 使用正确的占位符(如 `${deviceName}`, `${deviceType}`
- 示例:`tb/telemetry/${deviceName}`
2. **检查消息格式**
- 确认 `Parse to plain text` 设置是否正确
- 如果设置为 `true`,消息会被转换为纯文本格式
### 问题 4日志级别不够详细
**症状**
- 看不到 MQTT 节点的详细日志
**解决方案**
1. **修改日志级别**
- 编辑 `thingsboard.conf``logback.xml`
- 将 MQTT 相关类的日志级别设置为 `DEBUG`
2. **查看特定日志**
```bash
docker logs mytb 2>&1 | grep -i "org.thingsboard.rule.engine.mqtt" | tail -50
```
---
## 验证 MQTT 节点是否生效
### 方法 1订阅 MQTT 主题
**在外部 MQTT 客户端订阅主题**
```bash
# 订阅 MQTT 节点配置的主题
mosquitto_sub -h <mqtt-broker-host> -p <port> -t "tb/telemetry/#" -v
```
**如果收到消息**,说明 MQTT 节点正常工作。
### 方法 2检查 MQTT Broker 日志
**如果 MQTT Broker 有日志**
- 查看是否有来自 ThingsBoard 的连接
- 查看是否有消息发布到指定主题
### 方法 3使用 ThingsBoard 调试功能
1. **启用规则节点调试事件**
- 在规则链编辑器中,点击 MQTT 节点
- 启用 "Debug mode"
- 保存规则链
2. **查看调试事件**
- 进入:`Rule Chains` → `Root Rule Chain``Debug events`
- 查看 MQTT 节点的处理情况
---
## 正确配置示例
### 规则链结构
```
设备数据
Save Timeseries (Success)
MQTT Node (Success)
结束
```
### MQTT 节点配置示例
```json
{
"topicPattern": "tb/telemetry/${deviceName}",
"host": "mqtt.example.com",
"port": 1883,
"connectTimeoutSec": 10,
"clientId": "tb-rule-engine",
"cleanSession": true,
"retainedMessage": false,
"ssl": false,
"parseToPlainText": false,
"protocolVersion": "MQTT_3_1_1",
"credentials": {
"type": "anonymous"
}
}
```
---
## 下一步操作建议
1. **立即检查**
- [ ] 规则链中 MQTT 节点是否存在
- [ ] Save Timeseries 节点是否连接到 MQTT 节点
- [ ] MQTT 节点配置是否完整
2. **配置验证**
- [ ] MQTT Broker 地址和端口是否正确
- [ ] 认证信息是否正确(如果需要)
- [ ] Topic Pattern 是否正确
3. **测试验证**
- [ ] 使用外部 MQTT 客户端订阅主题
- [ ] 发送测试数据到 ThingsBoard
- [ ] 检查是否收到转发消息
4. **日志检查**
- [ ] 查看是否有连接错误
- [ ] 查看是否有发布成功日志
- [ ] 启用调试模式查看详细日志
---
## 总结
根据当前日志分析,**MQTT 节点很可能没有生效**,原因可能是:
1. **节点连接问题**最可能Save Timeseries 节点没有连接到 MQTT 节点
2. **配置错误**MQTT Broker 地址、端口或认证信息错误
3. **初始化失败**MQTT 节点初始化失败但没有记录详细错误
**建议**
1. 首先在 Web UI 中检查规则链配置和节点连接
2. 确认 MQTT 节点配置正确
3. 测试 MQTT Broker 连接
4. 如果问题仍然存在,启用调试模式查看详细日志