wangfq
|
b932dd7c6f
|
feat: DBNMQTTool 日志增强 — 收发打印 topic + payload 详情
新增 _log_send() / _log_recv() 两个统一日志方法:
- 发送: 标签 + → topic + PASTE:{精简payload}
- 接收: ← topic + summary + RECV:{精简payload}
- payload >200/300 字符自动截断
覆盖所有收发路径:
- [模拟]/[协议]/[自定义]/[命令] 发送
- 响应/loop_data/event_report/heartbeat/Initialize 接收
- mqtt_client.py 自动订阅事件日志
|
2026-07-07 17:47:58 +08:00 |
|
wangfq
|
c98aa5b0bb
|
fix: MqttClient 回退信号方案,添加 publish debug 日志追踪阻塞点
- 移除 QObject 基类和 QueuedConnection 信号方案
- publish() 直接调用 self._client.publish() 并打印前后日志
- 添加 print(flush=True) 确保 Windows 终端实时输出
目的是确认阻塞发生在:
[MqttClient] publish topic=... qos=1 ← 打印后消失?
[MqttClient] publish done mid=... ← 这行能否出现?
|
2026-07-07 17:27:15 +08:00 |
|
wangfq
|
baa82c895d
|
fix: MqttClient 重构为 QObject — publish 通过 Qt 信号排队避免 C 层崩溃
问题: paho-mqtt publish() C 扩展在 Windows 上从 GUI 线程调用时静默崩溃。
修复:
- MqttClient 改为 QObject 子类
- publish() 通过 Qt Signal(Qt.QueuedConnection) 排队,_do_publish()
始终在主线程事件循环中执行 paho 调用
- 状态/消息通知改用 Qt Signal 跨线程传递
- 新增 subscribe()/unsubscribe() 公开 API,消除 main.py 直接
访问 _client 的脆弱代码
- 移除 MainWindow 中已不再需要的中间信号 _mqtt_status/_mqtt_msg
|
2026-07-07 14:25:49 +08:00 |
|
wangfq
|
6eb93637c7
|
fix: DBNMQTTool — 所有 publish 路径增加通用异常捕获
问题: _custom_publish / _proto_publish / _sim_publish 只 catch
json.JSONDecodeError, MqttClient.publish() 抛出的 ConnectionError
等异常未被捕获, 在 Qt 信号槽中导致静默崩溃(Windows 无 traceback).
修复:
- _custom_publish: +except Exception, 避免 toPlainText() 重复调用
- _proto_publish: +except Exception, 避免 toPlainText() 重复调用
- _sim_publish: +except Exception
- _custom_subscribe/_custom_unsubscribe: +except Exception, +_client 空检查
|
2026-07-07 14:15:36 +08:00 |
|
wangfq
|
5a2ef0be5d
|
fix: DBNMQTTool — right 局部变量改为 self._notebook
_build_ui() 中 right = QTabWidget() 是局部变量,导致
_proto_publish_item() 中 self._notebook.setCurrentWidget() 报
AttributeError: 'MainWindow' object has no attribute '_notebook'
|
2026-07-07 14:07:52 +08:00 |
|
wangfq
|
213716033c
|
feat: MQTT 协议 V1.01 — Topic 压缩为双主题 (up/down)
- 7个主题压缩为2个: dld960/{sn}/down + dld960/{sn}/up
- 消息类型由 JSON cmd 字段区分,不再依赖 topic 路径
- protocol.py: topic_up()/topic_down() 替代旧7个函数
- mqtt_client.py: 4个通配符订阅→1个 dld960/+/up
- main.py: 消息路由改为 cmd 匹配,协议Topic树简化
- 文档更新 V1.01
|
2026-07-07 09:18:29 +08:00 |
|
wangfq
|
c19e465284
|
feat(DBNMQTTool): 模拟上报 + 协议Topic + 自定义Topic
新增三个 Tab:
1. 模拟上报 — 可编辑 loop_data/event_report/heartbeat JSON,
支持单次发送和周期上报(间隔可调)
2. 协议Topic — 按协议文档列出所有 dld960/{sn}/srv/... 和 dev/... topic,
双击填充到发布区,支持编辑 JSON 载荷
3. 自定义Topic — 自由输入 topic 发布,支持订阅/取消订阅,
接收消息实时展示
新增:
- QComboBox, QSpinBox, QPlainTextEdit 控件
- paho.mqtt.client 导入(topic_matches_sub 通配符匹配)
- 自定义订阅消息自动路由到接收区
|
2026-07-06 21:40:26 +08:00 |
|
wangfq
|
e1bf3dcfca
|
refactor(DBNMQTTool): tkinter → PySide6
- main.py: 完整重写为 PySide6 (Qt for Python)
- requirements.txt: 加 PySide6>=6.6.0
- 使用 Qt 信号/槽替代 tkinter 回调
- 界面更现代化,Fusion 风格
- 分组框 (QGroupBox) 布局,QSplitter 分栏
|
2026-07-06 21:19:55 +08:00 |
|
wangfq
|
a2cfe4602c
|
feat: DBNMQTTool — DLD960 IoT MQTT 设备管理工具 (Python/tkinter 跨平台)
基于《DLD960_IoT_MQTT协议.md》V1.00 实现
功能:
- MQTT Broker 连接管理
- 设备自动发现(订阅 dld960/+/dev/# 通配符)
- 设备信息查询(dev_info_query)
- 网络配置(SSC/IoT TCP)+ Topic 配置
- 实时线圈数据监控(loop_data)+ 事件上报(event_report)
- 心跳监控(heartbeat)
- 控制命令:密码验证/设置、出厂初始化、设备复位
项目结构:
- main.py 主窗口 (tkinter GUI)
- dbn_mqtt_tool/
- protocol.py DLD960 IoT MQTT 协议定义
- mqtt_client.py MQTT 客户端封装 (paho-mqtt)
- device_manager.py 设备发现与状态管理
|
2026-07-06 18:14:38 +08:00 |
|