Verbessere MQTT-Nachrichtenverarbeitung in BambuVirtualPrinter mit erweiterten Debug-Logs und Fehlerbehandlung; aktualisiere Temperaturabfrage zur Ausgabe aktueller Daten unabhängig vom Verbindungsstatus

This commit is contained in:
Manuel Weiser 2025-03-02 11:03:12 +01:00
parent eb397ff7b7
commit 3690767ced

View File

@ -269,34 +269,46 @@ class BambuVirtualPrinter:
try:
# Decode message and update client data
payload = json.loads(msg.payload.decode('utf-8'))
self._log.debug(f"MQTT message received on topic {msg.topic}: {payload.keys()}")
self._log.debug(f"MQTT message received on topic {msg.topic}: {list(payload.keys())}")
# Vollständigen Payload für Debugging ausgeben
self._log.debug(f"Full MQTT payload: {json.dumps(payload)}")
# Verarbeite direkt die Daten aus der MQTT-Nachricht
if 'print' in payload:
self._log.info(f"Processing print data with keys: {list(payload['print'].keys())}")
self._process_print_data(payload['print'])
# Forward the message to pybambu for its internal state
try:
if hasattr(self._bambu_client, '_process_message'):
self._bambu_client._process_message(msg.topic, payload)
self._log.debug("Message forwarded to pybambu via _process_message")
else:
# Alternative Methode für pybambu
self._update_bambu_client_state(payload)
self._log.debug("Message processed via _update_bambu_client_state")
except Exception as e:
self._log.error(f"Error forwarding to pybambu: {e}")
# Trigger explicit update of printer info after processing print data
self._log.debug("Triggering printer data update")
self.new_update("event_printer_data_update")
if 'info' in payload:
self._log.info(f"Processing info data with keys: {list(payload['info'].keys())}")
if 'hms' in payload['info']:
# Aktualisiere HMS-Fehler direkt
try:
if hasattr(self._bambu_client.device, 'hms'):
self._bambu_client.device.hms.update_from_payload(payload['info']['hms'])
self._log.debug("HMS error data updated")
except Exception as e:
self._log.error(f"Error updating HMS data: {e}")
self._log.debug("Triggering HMS errors update")
self.new_update("event_hms_errors")
except Exception as e:
self._log.error(f"Error processing MQTT message: {e}")
self._log.error(f"Error processing MQTT message: {e}", exc_info=True)
def _process_print_data(self, print_data):
"""Verarbeitet direkt die Druckerdaten aus der MQTT-Nachricht"""
@ -833,13 +845,19 @@ class BambuVirtualPrinter:
return output
def _processTemperatureQuery(self) -> bool:
# includeOk = not self._okBeforeCommandOutput
if self.is_connected:
output = self._create_temperature_message()
self.sendIO(output)
return True
else:
return False
# Debug-Log hinzufügen, um zu prüfen, ob die Methode aufgerufen wird
self._log.debug(f"Processing temperature query - connected: {self.is_connected}")
# Aktuelle Temperaturdaten ausgeben
self._log.debug(f"Current temperature data: Nozzle={self._telemetry.temp[0]}/{self._telemetry.targetTemp[0]}, " +
f"Bed={self._telemetry.bedTemp}/{self._telemetry.bedTargetTemp}")
# Temperaturmeldung erzeugen und senden, unabhängig von Connected-Status
output = self._create_temperature_message()
self._log.debug(f"Sending temperature message: {output.strip()}")
self.sendIO(output)
return True
def close(self):
if self._mqtt_client and self._mqtt_connected: