Erweitere die Statusverarbeitung in BambuVirtualPrinter zur besseren Erkennung von Druckzuständen und verbessere die Fehlerbehandlung bei der Statusaktualisierung.
This commit is contained in:
parent
c7c089ef68
commit
fea0f0ed25
@ -465,29 +465,63 @@ class BambuVirtualPrinter:
|
||||
try:
|
||||
self._log.debug(f"Received printer state update: {print_job_state}")
|
||||
|
||||
# Normalisieren des Status, falls er 'unknown' ist
|
||||
if print_job_state == "unknown":
|
||||
# Wenn der Status unbekannt ist, versuchen wir, ihn aus anderen Informationen abzuleiten
|
||||
if hasattr(self._bambu_client, 'device') and hasattr(self._bambu_client.device, 'print_job'):
|
||||
# Prüfe ob Druckfortschritt vorhanden ist
|
||||
if hasattr(self._bambu_client.device.print_job, 'mc_percent') and self._bambu_client.device.print_job.mc_percent > 0:
|
||||
print_job_state = "RUNNING"
|
||||
self._log.debug(f"Changed unknown state to RUNNING based on print progress")
|
||||
# Erweitern der Statuserkennung - in Bambu können die Status auch kleingeschrieben sein
|
||||
# oder andere Werte haben als die, die wir erwarten
|
||||
print_job_state = print_job_state.upper() if print_job_state else "UNKNOWN"
|
||||
|
||||
# Normalisieren des Status, falls er 'unknown' ist oder nicht erkannt wird
|
||||
if print_job_state in ["UNKNOWN", ""]:
|
||||
# Wenn wir keinen erkannten Status haben, versuchen wir ihn aus anderen Daten abzuleiten
|
||||
# Prüfe ob Druckfortschritt vorhanden ist
|
||||
if self.current_print_job and self.current_print_job.print_percentage > 0:
|
||||
print_job_state = "RUNNING"
|
||||
self._log.debug(f"Changed unknown state to RUNNING based on print progress from current_print_job")
|
||||
# Prüfe auf Temperaturen, die auf einen laufenden Druck hinweisen könnten
|
||||
elif self._telemetry.targetTemp[0] > 150 or self._telemetry.bedTargetTemp > 40:
|
||||
print_job_state = "PREPARE"
|
||||
self._log.debug(f"Changed unknown state to PREPARE based on target temperatures")
|
||||
|
||||
# Status im PrintJob aktualisieren
|
||||
if self.current_print_job is not None:
|
||||
if self.current_print_job is None and print_job_state in ["RUNNING", "PREPARE", "PAUSE"]:
|
||||
# Wenn wir keinen PrintJob haben, aber ein Druck läuft, erstellen wir einen
|
||||
self._log.info(f"Creating new PrintJob for running print with state: {print_job_state}")
|
||||
self.current_print_job = PrintJob()
|
||||
self.current_print_job.gcode_state = print_job_state
|
||||
elif self.current_print_job is not None:
|
||||
self.current_print_job.gcode_state = print_job_state
|
||||
|
||||
# Statusänderung in den Zustandsautomaten übertragen
|
||||
if print_job_state in ["IDLE", "FINISH", "FAILED"]:
|
||||
# Prüfe auf zusätzliche Indikatoren für einen aktiven Druck
|
||||
is_printing = False
|
||||
|
||||
# Check 1: Standard-Statuserkennung
|
||||
if print_job_state in ["RUNNING", "PREPARE"]:
|
||||
is_printing = True
|
||||
|
||||
# Check 2: Druckfortschritt > 0 und < 100
|
||||
if hasattr(self._bambu_client, 'device') and hasattr(self._bambu_client.device, 'print_job'):
|
||||
if hasattr(self._bambu_client.device.print_job, 'mc_percent'):
|
||||
progress = getattr(self._bambu_client.device.print_job, 'mc_percent', 0)
|
||||
if progress > 0 and progress < 100:
|
||||
is_printing = True
|
||||
self._log.debug(f"Detected active printing based on progress: {progress}%")
|
||||
|
||||
# Check 3: Temperaturen deuten auf aktiven Druck hin
|
||||
if self._telemetry.temp[0] > 170 and self._telemetry.bedTemp > 40:
|
||||
# Hohe aktuelle Temperaturen deuten auf einen laufenden Druck hin
|
||||
is_printing = True
|
||||
self._log.debug(f"Detected potential printing based on actual temperatures: "
|
||||
f"Nozzle={self._telemetry.temp[0]}, Bed={self._telemetry.bedTemp}")
|
||||
|
||||
# Statusänderung in den Zustandsautomaten übertragen basierend auf allen Checks
|
||||
if print_job_state in ["IDLE", "FINISH", "FAILED"] and not is_printing:
|
||||
self._log.debug(f"Changing to IDLE state based on status: {print_job_state} and is_printing={is_printing}")
|
||||
self.change_state(self._state_idle)
|
||||
elif print_job_state in ["RUNNING", "PREPARE"]:
|
||||
elif print_job_state in ["RUNNING", "PREPARE"] or is_printing:
|
||||
self._log.debug(f"Changing to PRINTING state based on status: {print_job_state} and is_printing={is_printing}")
|
||||
self.change_state(self._state_printing)
|
||||
elif print_job_state == "PAUSE":
|
||||
self._log.debug(f"Changing to PAUSED state based on status: {print_job_state}")
|
||||
self.change_state(self._state_paused)
|
||||
elif print_job_state == "unknown":
|
||||
# Wenn wir keine bessere Information haben, behalten wir den aktuellen Zustand bei
|
||||
self._log.debug("Keeping current state due to unknown printer state")
|
||||
else:
|
||||
self._log.warn(f"Unknown print job state: {print_job_state}")
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user