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:
|
try:
|
||||||
self._log.debug(f"Received printer state update: {print_job_state}")
|
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"]:
|
if print_job_state in ["IDLE", "FINISH", "FAILED"]:
|
||||||
self.change_state(self._state_idle)
|
self.change_state(self._state_idle)
|
||||||
elif print_job_state in ["RUNNING", "PREPARE"]:
|
elif print_job_state in ["RUNNING", "PREPARE"]:
|
||||||
self.change_state(self._state_printing)
|
self.change_state(self._state_printing)
|
||||||
elif print_job_state == "PAUSE":
|
elif print_job_state == "PAUSE":
|
||||||
self.change_state(self._state_paused)
|
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:
|
else:
|
||||||
self._log.warn(f"Unknown print job state: {print_job_state}")
|
self._log.warn(f"Unknown print job state: {print_job_state}")
|
||||||
|
|
||||||
@ -930,17 +942,35 @@ class BambuVirtualPrinter:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
if self._mqtt_client and self._mqtt_connected:
|
"""Safely close all connections."""
|
||||||
self._mqtt_client.loop_stop()
|
try:
|
||||||
self._mqtt_client.disconnect()
|
if self._mqtt_client and self._mqtt_connected:
|
||||||
self._mqtt_connected = False
|
self._mqtt_client.loop_stop()
|
||||||
self._custom_connected = False
|
self._mqtt_client.disconnect()
|
||||||
# Ändern Sie jeden Verweis auf bambu_client.connected zu self.is_connected
|
self._mqtt_connected = False
|
||||||
if self._bambu_client:
|
self._custom_connected = False
|
||||||
self._bambu_client.disconnect()
|
|
||||||
self.change_state(self._state_idle)
|
# Sicherstellen, dass wir keinen AttributError bekommen, wenn wir den BambuClient trennen
|
||||||
self._serial_io.close()
|
if self._bambu_client:
|
||||||
self.stop()
|
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):
|
def stop(self):
|
||||||
self._running = False
|
self._running = False
|
||||||
|
Loading…
x
Reference in New Issue
Block a user