diff --git a/DBNMQTTool/dbn_mqtt_tool/mqtt_client.py b/DBNMQTTool/dbn_mqtt_tool/mqtt_client.py index bc6ef70..be43e36 100644 --- a/DBNMQTTool/dbn_mqtt_tool/mqtt_client.py +++ b/DBNMQTTool/dbn_mqtt_tool/mqtt_client.py @@ -68,6 +68,7 @@ class MqttClient: self._notify_status(True, "已连接到 Broker") from .protocol import TOPIC_ALL_DEVICE_UP + print(f"[MqttClient] auto-subscribe: {TOPIC_ALL_DEVICE_UP}", flush=True) client.subscribe(TOPIC_ALL_DEVICE_UP, qos=1) else: self._connected = False diff --git a/DBNMQTTool/main.py b/DBNMQTTool/main.py index 0e786e5..3824d9c 100644 --- a/DBNMQTTool/main.py +++ b/DBNMQTTool/main.py @@ -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)