3.7 KiB
3.7 KiB
DBNMQTTool 开发日志
DLD960 IoT MQTT 桌面工具 | Python 3.11+ | PySide6 | paho-mqtt v2 | 跨平台 (Windows/Linux/macOS)
定位: DLD960 车检器 MQTT 调试工具 — 设备管理、实时数据监控、模拟上报、主题订阅/发布
2026-07-06 (晚) — 模拟上报 + 协议Topic + 自定义Topic c19e465
1. 模拟上报 Tab
- loop_data / event_report / heartbeat 三类上报携带独立可编辑 JSON 编辑区
- 范例填充:首次切换类型时自动填入协议定义的标准载荷
- 单次发送 + 周期上报(QSpinBox 可调间隔)
- 周期开关由
QPushButtontoggle 控制
2. 协议Topic Tab
- 预加载
dld960/{sn}/srv/...订阅主题 和dev/...设备发起主题 - QListWidget 展示,双击自动填充到发布区
- 发布区可编辑 JSON 载荷,一键发布
- 主题列表受 SN 输入框驱动,实时更新
3. 自定义Topic Tab
- 自由输入 topic + JSON 载荷,QoS (0/1/2) 可调
- 订阅 / 取消订阅,接收消息实时展示在 QPlainTextEdit
#/+通配符支持,paho.mqtt.topic_matches_sub路由匹配- 自定义订阅的消息自动分发到接收区,附带 topic 前缀
4. 新增依赖
paho.mqtt.client导入新增topic_matches_sub- UI 控件: QComboBox, QSpinBox, QPlainTextEdit
2026-07-06 — paho-mqtt v2 回调修复 213c0dd
问题
断开连接时报错:
TypeError: MqttClient._on_disconnect() missing 1 required positional argument: 'reason_code'
根因
paho-mqtt v2 默认 callback_api_version=VERSION2,on_disconnect 回调签名为 5 参数 (client, userdata, flags, reason_code, properties),而 v1 为 3 参数 (client, userdata, rc)。
修复
_on_disconnect改用*args兼容 v1/v2Client构造显式指定callback_api_version=CallbackAPIVersion.VERSION2_on_connect保持 v2 签名不变
2026-07-06 — tkinter → PySide6 迁移 e1bf3dc
决策
放弃 tkinter,改用 PySide6 (Qt for Python),理由:
- 跨平台原生外观 (Fusion 风格)
- Qt 信号/槽机制替代 tkinter 回调,更易维护
- 组件丰富 (QGroupBox, QSplitter, QTabWidget 等)
改动
main.py全量重写为 PySide6 主窗口- 布局: QGroupBox 分组 → QSplitter 分栏 → QTabWidget 功能分区
requirements.txt新增PySide6>=6.6.0- tkinter → Qt 映射:
StringVar→信号/槽,Listbox→QListWidget,Text→QTextEdit
2026-07-06 — 项目初始化 a2cfe46
功能 (初始版本, tkinter)
- MQTT Broker 连接管理
- 设备自动发现 (
dld960/+/dev/#通配符订阅) - 设备信息查询 + 主题配置
- 实时线圈数据 / 事件上报 / 心跳 监控
- 控制命令: 密码验证/设置、出厂初始化、设备复位
项目结构
DBNMQTTool/
├── main.py # 主窗口 (tkinter → 后迁移至 PySide6)
├── dbn_mqtt_tool/
│ ├── protocol.py # DLD960 IoT MQTT 协议定义 (主题/命令/载荷模板)
│ ├── mqtt_client.py # MQTT 客户端封装 (paho-mqtt v2)
│ └── device_manager.py # 设备发现与状态管理
└── requirements.txt # paho-mqtt>=2.0.0 + PySide6>=6.6.0
协议依据
DLD960_IoT_MQTT协议.md V1.00
当前状态
| 组件 | 状态 |
|---|---|
| MQTT 连接/断开 | ✅ 已实现,v1/v2 兼容 |
| 设备发现 | ✅ 通配符订阅 |
| 实时数据监控 | ✅ loop_data/event_report/heartbeat |
| 控制命令 | ✅ 15 条命令 |
| 模拟上报 | ✅ c19e465 |
| 协议Topic订阅/发布 | ✅ c19e465 |
| 自定义Topic订阅/发布 | ✅ c19e465 |
| 固件联调 | ✅ vd960DBN IoT 模式稳定上报 |