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 自动订阅事件日志
This commit is contained in:
+36
-8
@@ -450,7 +450,7 @@ class MainWindow(QMainWindow):
|
||||
try:
|
||||
payload = json.loads(text)
|
||||
self._mqtt.publish(topic, payload, qos=1)
|
||||
self._log(f"[模拟] → {topic}")
|
||||
self._log_send("[模拟]", topic, payload)
|
||||
except json.JSONDecodeError as e:
|
||||
QMessageBox.warning(self, "JSON 错误", str(e))
|
||||
except Exception as e:
|
||||
@@ -585,7 +585,7 @@ class MainWindow(QMainWindow):
|
||||
else:
|
||||
payload = build_request(CMD_DEV_INFO_QUERY)
|
||||
self._mqtt.publish(topic, payload)
|
||||
self._log(f"[协议] → {topic}")
|
||||
self._log_send("[协议]", topic, payload)
|
||||
except json.JSONDecodeError as e:
|
||||
QMessageBox.warning(self, "JSON 错误", str(e))
|
||||
except Exception as e:
|
||||
@@ -687,7 +687,7 @@ class MainWindow(QMainWindow):
|
||||
payload = json.loads(raw) if raw else {}
|
||||
qos = int(self._custom_qos.currentText())
|
||||
self._mqtt.publish(topic, payload, qos=qos)
|
||||
self._log(f"[自定义] → {topic}")
|
||||
self._log_send("[自定义]", topic, payload)
|
||||
except json.JSONDecodeError as e:
|
||||
QMessageBox.warning(self, "JSON 错误", str(e))
|
||||
except Exception as e:
|
||||
@@ -775,7 +775,7 @@ class MainWindow(QMainWindow):
|
||||
code = payload.get("code", -1)
|
||||
pmsg = payload.get("msg", "")
|
||||
data = payload.get("data", {})
|
||||
self._log(f"[{ts}] {dev_serial} ← {cmd} code={code} {pmsg}")
|
||||
self._log_recv(topic, payload, f"{cmd} code={code} {pmsg}")
|
||||
if code == 0:
|
||||
if cmd == CMD_DEV_INFO_QUERY:
|
||||
self._devmgr.update_from_dev_info(dev_serial, data)
|
||||
@@ -789,20 +789,27 @@ class MainWindow(QMainWindow):
|
||||
data = payload.get("data", {})
|
||||
self._devmgr.update_loop_data(dev_serial, data)
|
||||
chs = len(data.get("channels", []))
|
||||
self._log(f"[{ts}] {dev_serial} ← loop_data ({chs} 通道)")
|
||||
self._log_recv(topic, payload, f"loop_data ({chs}ch)")
|
||||
self._append_text(self._loop_text, json.dumps(payload, indent=2, ensure_ascii=False))
|
||||
|
||||
elif cmd == CMD_EVENT_REPORT:
|
||||
data = payload.get("data", {})
|
||||
self._devmgr.update_event(dev_serial, data)
|
||||
evt_count = len(data.get("events", []))
|
||||
self._log(f"[{ts}] {dev_serial} ← event_report ({evt_count} 事件)")
|
||||
self._log_recv(topic, payload, f"event ({evt_count} events)")
|
||||
self._append_text(self._event_text, json.dumps(payload, indent=2, ensure_ascii=False))
|
||||
|
||||
elif cmd == CMD_HEARTBEAT:
|
||||
data = payload.get("data", {})
|
||||
self._devmgr.update_heartbeat(dev_serial, data)
|
||||
self._log(f"[{ts}] {dev_serial} ← heartbeat (uptime={data.get('uptime', 0)}s)")
|
||||
self._log_recv(topic, payload, f"heartbeat uptime={data.get('uptime', 0)}s")
|
||||
|
||||
# 旧协议 / 无 cmd 字段 的消息(如 Initialize)
|
||||
elif "Method" in payload:
|
||||
self._log_recv(topic, payload, f"Method={payload.get('Method', '?')}")
|
||||
|
||||
else:
|
||||
self._log_recv(topic, payload)
|
||||
|
||||
# 自定义订阅消息 → 显示到自定义 Topic 接收区
|
||||
for sub_topic in self._custom_subs:
|
||||
@@ -840,7 +847,10 @@ class MainWindow(QMainWindow):
|
||||
return
|
||||
try:
|
||||
mid = self._mqtt.send_command(sn, cmd, data)
|
||||
self._log(f"→ {sn} {cmd} (msg_id={mid})")
|
||||
from dbn_mqtt_tool.protocol import build_request, get_topic_for_cmd
|
||||
msg = build_request(cmd, data)
|
||||
topic = get_topic_for_cmd(cmd, sn)
|
||||
self._log_send(f"[命令] {sn}", topic, msg)
|
||||
except Exception as e:
|
||||
QMessageBox.critical(self, "发送失败", str(e))
|
||||
|
||||
@@ -979,6 +989,24 @@ class MainWindow(QMainWindow):
|
||||
self._log_text.append(f"[{ts}] {msg}")
|
||||
self._log_text.moveCursor(QTextCursor.End)
|
||||
|
||||
# ---- 详细收发日志 ----
|
||||
|
||||
def _log_send(self, label: str, topic: str, payload: dict):
|
||||
"""记录发送消息: 标签 + topic + 精简 payload"""
|
||||
payload_str = json.dumps(payload, ensure_ascii=False)
|
||||
if len(payload_str) > 200:
|
||||
payload_str = payload_str[:200] + "..."
|
||||
self._log(f"{label} → {topic}")
|
||||
self._log(f" PASTE: {payload_str}")
|
||||
|
||||
def _log_recv(self, topic: str, payload: dict, summary: str = ""):
|
||||
"""记录接收消息: topic + summary + 精简 payload"""
|
||||
payload_str = json.dumps(payload, ensure_ascii=False)
|
||||
if len(payload_str) > 300:
|
||||
payload_str = payload_str[:300] + "..."
|
||||
self._log(f"← {topic}{' ' + summary if summary else ''}")
|
||||
self._log(f" RECV: {payload_str}")
|
||||
|
||||
|
||||
def main():
|
||||
app = QApplication(sys.argv)
|
||||
|
||||
Reference in New Issue
Block a user