Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
cb4b345aa7 | |||
3d0cc26147 | |||
ff58636e41 | |||
f54ab5c29f | |||
7a4439c53e | |||
9eb8b0da65 |
@ -68,6 +68,7 @@ class BambuPrinter:
|
||||
self._sdCardReady = True
|
||||
self._sdPrinter = None
|
||||
self._sdPrinting = False
|
||||
self._sdPrintStarting = False
|
||||
self._sdPrintingSemaphore = threading.Event()
|
||||
self._sdPrintingPausedSemaphore = threading.Event()
|
||||
self._selectedSdFile = None
|
||||
@ -163,14 +164,16 @@ class BambuPrinter:
|
||||
self.bedTargetTemp = temperatures.get("target_bed_temp", 0.0)
|
||||
self.chamberTemp = temperatures.get("chamber_temp", 0.0)
|
||||
|
||||
if print_job.get("gcode_state") == "RUNNING":
|
||||
if print_job.get("gcode_state") == "RUNNING" or print_job.get("gcode_state") == "PREPARE":
|
||||
if not self._sdPrintingSemaphore.is_set():
|
||||
self._sdPrintingSemaphore.set()
|
||||
if self._sdPrintingPausedSemaphore.is_set():
|
||||
self._sdPrintingPausedSemaphore.clear()
|
||||
self._sdPrintStarting = False
|
||||
if not self._sdPrinting:
|
||||
filename = print_job.get("subtask_name")
|
||||
# TODO: swap this out to use 8 dot 3 name based on long name/path
|
||||
if filename[-4:].lower() != ".3mf":
|
||||
filename = print_job.get("gcode_file")
|
||||
self._selectSdFile(filename)
|
||||
self._startSdPrint(from_printer=True)
|
||||
|
||||
@ -185,9 +188,12 @@ class BambuPrinter:
|
||||
self._send("// action:paused")
|
||||
self._sendPaused()
|
||||
|
||||
if print_job.get("gcode_state") == "FINISH" and self._sdPrintingSemaphore.is_set():
|
||||
self._selectedSdFilePos = self._selectedSdFileSize
|
||||
self._finishSdPrint()
|
||||
if ( print_job.get("gcode_state") == "FINISH" or print_job.get("gcode_state") == "FAILED" ):
|
||||
if self._sdPrintStarting is False:
|
||||
self._sdPrinting = False
|
||||
if self._sdPrintingSemaphore.is_set():
|
||||
self._selectedSdFilePos = self._selectedSdFileSize
|
||||
self._finishSdPrint()
|
||||
def _create_connection(self):
|
||||
if (self._settings.get(["device_type"]) != "" and
|
||||
self._settings.get(["serial"]) != "" and
|
||||
@ -241,6 +247,7 @@ class BambuPrinter:
|
||||
|
||||
self._sdCardReady = True
|
||||
self._sdPrinting = False
|
||||
self._sdPrintStarting = False
|
||||
if self._sdPrinter:
|
||||
self._sdPrinting = False
|
||||
self._sdPrintingSemaphore.clear()
|
||||
@ -429,6 +436,14 @@ class BambuPrinter:
|
||||
else:
|
||||
self._sendOk()
|
||||
|
||||
if self.bambu.connected:
|
||||
GCODE_COMMAND = commands.SEND_GCODE_TEMPLATE
|
||||
GCODE_COMMAND['print']['param'] = data + "\n"
|
||||
if self.bambu.publish(GCODE_COMMAND):
|
||||
self._logger.info("command sent successfully")
|
||||
self._sendOk()
|
||||
continue
|
||||
|
||||
finally:
|
||||
self._logger.debug(f"{data}")
|
||||
|
||||
@ -474,13 +489,18 @@ class BambuPrinter:
|
||||
|
||||
def _gcode_M524(self, data: str) -> bool:
|
||||
if self._sdCardReady:
|
||||
self._cancelSdPrint()
|
||||
return self._cancelSdPrint()
|
||||
return False
|
||||
|
||||
def _gcode_M26(self, data: str) -> bool:
|
||||
self._logger.debug("ignoring M26 command.")
|
||||
self._send("M26 disabled for Bambu")
|
||||
return True
|
||||
if data == "M26 S0":
|
||||
if self._sdCardReady:
|
||||
return self._cancelSdPrint()
|
||||
return False
|
||||
else:
|
||||
self._logger.debug("ignoring M26 command.")
|
||||
self._send("M26 disabled for Bambu")
|
||||
return True
|
||||
|
||||
def _gcode_M27(self, data: str) -> bool:
|
||||
def report():
|
||||
@ -625,7 +645,7 @@ class BambuPrinter:
|
||||
access_code = self._settings.get(["access_code"])
|
||||
|
||||
ftp = IoTFTPSClient(f"{host}", 990, "bblp", f"{access_code}", ssl_implicit=True)
|
||||
filelist = ftp.list_files("", ".3mf")
|
||||
filelist = ftp.list_files("", ".3mf") or []
|
||||
|
||||
for entry in filelist:
|
||||
if entry.startswith("/"):
|
||||
@ -643,8 +663,29 @@ class BambuPrinter:
|
||||
"size": filesize,
|
||||
"timestamp": unix_timestamp_to_m20_timestamp(int(filedate))
|
||||
}
|
||||
result[filename.lower()] = data
|
||||
result[dosname.lower()] = filename.lower()
|
||||
result[filename.lower()] = data
|
||||
|
||||
filelistcache = ftp.list_files("cache/", ".3mf") or []
|
||||
|
||||
for entry in filelistcache:
|
||||
if entry.startswith("/"):
|
||||
filename = entry[1:]
|
||||
else:
|
||||
filename = entry
|
||||
filesize = ftp.ftps_session.size("cache/"+entry)
|
||||
date_str = ftp.ftps_session.sendcmd(f"MDTM cache/{entry}").replace("213 ", "")
|
||||
filedate = datetime.datetime.strptime(date_str, "%Y%m%d%H%M%S").replace(tzinfo=datetime.timezone.utc).timestamp()
|
||||
dosname = get_dos_filename(filename, existing_filenames=list(result.keys())).lower()
|
||||
data = {
|
||||
"dosname": dosname,
|
||||
"name": filename,
|
||||
"path": "cache/"+filename,
|
||||
"size": filesize,
|
||||
"timestamp": unix_timestamp_to_m20_timestamp(int(filedate))
|
||||
}
|
||||
result[dosname.lower()] = filename.lower()
|
||||
result[filename.lower()] = data
|
||||
|
||||
return result
|
||||
|
||||
@ -680,6 +721,7 @@ class BambuPrinter:
|
||||
if self._selectedSdFile is not None:
|
||||
if self._sdPrinter is None:
|
||||
self._sdPrinting = True
|
||||
self._sdPrintStarting = True
|
||||
self._sdPrinter = threading.Thread(target=self._sdPrintingWorker, kwargs={"from_printer": from_printer})
|
||||
self._sdPrinter.start()
|
||||
# self._sdPrintingSemaphore.set()
|
||||
@ -699,18 +741,21 @@ class BambuPrinter:
|
||||
else:
|
||||
self._logger.info("print pause failed")
|
||||
|
||||
def _cancelSdPrint(self):
|
||||
def _cancelSdPrint(self) -> bool:
|
||||
if self.bambu.connected:
|
||||
if self.bambu.publish(commands.STOP):
|
||||
self._logger.info("print cancelled")
|
||||
self._finishSdPrint()
|
||||
return True
|
||||
else:
|
||||
self._logger.info("print cancel failed")
|
||||
return False
|
||||
|
||||
def _setSdPos(self, pos):
|
||||
self._newSdFilePos = pos
|
||||
|
||||
def _reportSdStatus(self):
|
||||
if self._sdPrinter is not None and (self._sdPrintingSemaphore.is_set() or self._sdPrintingPausedSemaphore.is_set()):
|
||||
if ( self._sdPrinter is not None or self._sdPrintStarting is True ) and self._selectedSdFileSize > 0:
|
||||
self._send(f"SD printing byte {self._selectedSdFilePos}/{self._selectedSdFileSize}")
|
||||
else:
|
||||
self._send("Not SD printing")
|
||||
@ -799,6 +844,7 @@ class BambuPrinter:
|
||||
self._selectedSdFilePos = 0
|
||||
self._selectedSdFileSize = 0
|
||||
self._sdPrinting = False
|
||||
self._sdPrintStarting = False
|
||||
self._sdPrinter = None
|
||||
|
||||
def _deleteSdFile(self, filename: str) -> None:
|
||||
|
2
setup.py
2
setup.py
@ -14,7 +14,7 @@ plugin_package = "octoprint_bambu_printer"
|
||||
plugin_name = "OctoPrint-BambuPrinter"
|
||||
|
||||
# The plugin's version. Can be overwritten within OctoPrint's internal data via __plugin_version__ in the plugin module
|
||||
plugin_version = "0.0.9"
|
||||
plugin_version = "0.0.13"
|
||||
|
||||
# The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin
|
||||
# module
|
||||
|
Reference in New Issue
Block a user