From cd4103cc71b3f0c8050b9ade4fa8860f29f0f8f8 Mon Sep 17 00:00:00 2001 From: jneilliii Date: Sun, 18 Aug 2024 01:06:57 -0400 Subject: [PATCH] 0.1.2 (#40) * fix issues related to 8dot3 filenames used in M23 command, #39 * switch to auto reporting temp and sd status --- .../printer/bambu_virtual_printer.py | 32 +++++++++++++++++++ .../printer/file_system/cached_file_view.py | 2 +- .../printer/states/idle_state.py | 2 +- setup.py | 2 +- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/octoprint_bambu_printer/printer/bambu_virtual_printer.py b/octoprint_bambu_printer/printer/bambu_virtual_printer.py index f83b1d5..a2e2cd0 100644 --- a/octoprint_bambu_printer/printer/bambu_virtual_printer.py +++ b/octoprint_bambu_printer/printer/bambu_virtual_printer.py @@ -72,6 +72,7 @@ class BambuVirtualPrinter: self._running = True self._print_status_reporter = None + self._print_temp_reporter = None self._printer_thread = threading.Thread( target=self._printer_worker, name="octoprint.plugins.bambu_printer.printer_state", @@ -367,8 +368,10 @@ class BambuVirtualPrinter: interval = int(matchS.group(1)) if interval > 0: self.start_continuous_status_report(interval) + return False else: self.stop_continuous_status_report() + return False self.report_print_job_status() return True @@ -403,10 +406,39 @@ class BambuVirtualPrinter: self._processTemperatureQuery() return True + @gcode_executor.register("M155") + def _auto_report_temperatures(self, data: str) -> bool: + matchS = re.search(r"S([0-9]+)", data) + if matchS: + interval = int(matchS.group(1)) + if interval > 0: + self.start_continuous_temp_report(interval) + else: + self.stop_continuous_temp_report() + + self.report_print_job_status() + return True + + def start_continuous_temp_report(self, interval: int): + if self._print_temp_reporter is not None: + self._print_temp_reporter.cancel() + + self._print_temp_reporter = RepeatedTimer( + interval, self._processTemperatureQuery + ) + self._print_temp_reporter.start() + + def stop_continuous_temp_report(self): + if self._print_temp_reporter is not None: + self._print_temp_reporter.cancel() + self._print_temp_reporter = None + # noinspection PyUnusedLocal @gcode_executor.register_no_data("M115") def _report_firmware_info(self) -> bool: self.sendIO("Bambu Printer Integration") + self.sendIO("Cap:AUTOREPORT_SD_STATUS:1") + self.sendIO("Cap:AUTOREPORT_TEMP:1") self.sendIO("Cap:EXTENDED_M20:1") self.sendIO("Cap:LFN_WRITE:1") return True diff --git a/octoprint_bambu_printer/printer/file_system/cached_file_view.py b/octoprint_bambu_printer/printer/file_system/cached_file_view.py index ff94c13..8d1d4d8 100644 --- a/octoprint_bambu_printer/printer/file_system/cached_file_view.py +++ b/octoprint_bambu_printer/printer/file_system/cached_file_view.py @@ -85,7 +85,7 @@ class CachedFileView: return file_data def _get_file_by_stem_cached(self, file_stem: str, allowed_suffixes: list[str]): - for file_path_str in self._file_data_cache.keys(): + for file_path_str in list(self._file_data_cache.keys()) + list(self._file_alias_cache.keys()): file_path = Path(file_path_str) if file_stem == file_path.with_suffix("").stem and all( suffix in allowed_suffixes for suffix in file_path.suffixes diff --git a/octoprint_bambu_printer/printer/states/idle_state.py b/octoprint_bambu_printer/printer/states/idle_state.py index deb8e75..58fd01d 100644 --- a/octoprint_bambu_printer/printer/states/idle_state.py +++ b/octoprint_bambu_printer/printer/states/idle_state.py @@ -26,7 +26,7 @@ class IdleState(APrinterState): # URL to print. Root path, protocol can vary. E.g., if sd card, "ftp:///myfile.3mf", "ftp:///cache/myotherfile.3mf" filesystem_root = ( "file:///mnt/sdcard/" - if self._printer._settings.get_boolean(["device_type"]) in ["X1", "X1C"] + if self._printer._settings.get(["device_type"]) in ["X1", "X1C"] else "file:///" ) diff --git a/setup.py b/setup.py index ec9c852..79bddd2 100644 --- a/setup.py +++ b/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.1.1" +plugin_version = "0.1.2" # The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin # module