Verbessere die Verarbeitung des Druckstatus in BambuVirtualPrinter durch Normalisierung unbekannter Zustände und verbessere die Fehlerbehandlung beim Schließen der Verbindungen.
This commit is contained in:
parent
9358533ce8
commit
f5e6b3d0dd
@ -357,12 +357,24 @@ 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")
|
||||
|
||||
if print_job_state in ["IDLE", "FINISH", "FAILED"]:
|
||||
self.change_state(self._state_idle)
|
||||
elif print_job_state in ["RUNNING", "PREPARE"]:
|
||||
self.change_state(self._state_printing)
|
||||
elif print_job_state == "PAUSE":
|
||||
self.change_state(self._state_paused)
|
||||
elif print_job_state == "unknown":
|
||||
# Wenn wir keine bessere Information haben, betrachten wir es als IDLE
|
||||
self._log.debug("Keeping current state due to unknown printer state")
|
||||
else:
|
||||
self._log.warn(f"Unknown print job state: {print_job_state}")
|
||||
|
||||
@ -930,17 +942,35 @@ class BambuVirtualPrinter:
|
||||
return True
|
||||
|
||||
def close(self):
|
||||
if self._mqtt_client and self._mqtt_connected:
|
||||
self._mqtt_client.loop_stop()
|
||||
self._mqtt_client.disconnect()
|
||||
self._mqtt_connected = False
|
||||
self._custom_connected = False
|
||||
# Ändern Sie jeden Verweis auf bambu_client.connected zu self.is_connected
|
||||
if self._bambu_client:
|
||||
self._bambu_client.disconnect()
|
||||
self.change_state(self._state_idle)
|
||||
self._serial_io.close()
|
||||
self.stop()
|
||||
"""Safely close all connections."""
|
||||
try:
|
||||
if self._mqtt_client and self._mqtt_connected:
|
||||
self._mqtt_client.loop_stop()
|
||||
self._mqtt_client.disconnect()
|
||||
self._mqtt_connected = False
|
||||
self._custom_connected = False
|
||||
|
||||
# Sicherstellen, dass wir keinen AttributError bekommen, wenn wir den BambuClient trennen
|
||||
if self._bambu_client:
|
||||
try:
|
||||
self._bambu_client.disconnect()
|
||||
except AttributeError:
|
||||
# BambuClient hat keinen client-Attribut oder die disconnect-Methode funktioniert nicht wie erwartet
|
||||
self._log.warning("BambuClient disconnect failed, cleaning up manually")
|
||||
# Manuell aufräumen
|
||||
if hasattr(self._bambu_client, '_mqtt_client') and self._bambu_client._mqtt_client:
|
||||
try:
|
||||
self._bambu_client._mqtt_client.loop_stop()
|
||||
self._bambu_client._mqtt_client.disconnect()
|
||||
except:
|
||||
pass
|
||||
except Exception as e:
|
||||
self._log.error(f"Error during close: {e}", exc_info=True)
|
||||
finally:
|
||||
# Immer in einen sicheren Zustand zurückkehren
|
||||
self.change_state(self._state_idle)
|
||||
self._serial_io.close()
|
||||
self.stop()
|
||||
|
||||
def stop(self):
|
||||
self._running = False
|
||||
|
Loading…
x
Reference in New Issue
Block a user