# 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 可调间隔) - 周期开关由 `QPushButton` toggle 控制 ### 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/v2 - `Client` 构造显式指定 `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 模式稳定上报 |