diff --git a/ks_includes/printer.py b/ks_includes/printer.py index 7695fd47..d7f44647 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -38,12 +38,11 @@ class Printer: self.fancount = 0 self.ledcount = 0 self.output_pin_count = 0 - self.tempstore = {} - if not self.store_timeout: - self.store_timeout = GLib.timeout_add_seconds(1, self._update_temp_store) + self.tempstore = None self.tempstore_size = 1200 self.available_commands = {} self.temp_devices = self.sensors = None + self.stop_tempstore_updates() for x in self.config.keys(): if x[:8] == "extruder": @@ -106,6 +105,12 @@ class Printer: logging.info(f"# Output pins: {self.output_pin_count}") logging.info(f"# Leds: {self.ledcount}") + def stop_tempstore_updates(self): + logging.info("Stopping tempstore") + if self.store_timeout is not None: + GLib.source_remove(self.store_timeout) + self.store_timeout = None + def process_update(self, data): if self.data is None: return @@ -336,11 +341,10 @@ class Printer: return 0 def get_temp_store_devices(self): - if self.tempstore is not None: - return list(self.tempstore) + return list(self.tempstore) if self.tempstore is not None else self.tempstore def device_has_target(self, device): - return "target" in self.devices[device] or (device in self.tempstore and "targets" in self.tempstore[device]) + return "target" in self.devices[device] def get_temp_store(self, device, section=False, results=0): if device not in self.tempstore: @@ -390,6 +394,8 @@ class Printer: for _ in range(1, self.tempstore_size - length): self.tempstore[device][x].insert(0, 0) logging.info(f"Temp store: {list(self.tempstore)}") + if not self.store_timeout: + self.store_timeout = GLib.timeout_add_seconds(1, self._update_temp_store) def config_section_exists(self, section): return section in self.get_config_section_list() diff --git a/panels/main_menu.py b/panels/main_menu.py index 6163eae7..0afcf97f 100644 --- a/panels/main_menu.py +++ b/panels/main_menu.py @@ -67,10 +67,11 @@ class Panel(MenuPanel): if self.graph_update is not None: GLib.source_remove(self.graph_update) self.graph_update = None - self.graph_retry = 0 return False def activate(self): + if self._printer.tempstore is None: + self._screen.init_tempstore() self.update_graph_visibility() def deactivate(self): diff --git a/panels/temperature.py b/panels/temperature.py index 4b70ae1e..7e10916a 100644 --- a/panels/temperature.py +++ b/panels/temperature.py @@ -186,6 +186,8 @@ class Panel(ScreenPanel): self.graph_update = None def activate(self): + if self._printer.tempstore is None: + self._screen.init_tempstore() self.update_graph_visibility() def deactivate(self): diff --git a/screen.py b/screen.py index 158734a5..aebbb48f 100755 --- a/screen.py +++ b/screen.py @@ -654,6 +654,7 @@ class KlipperScreen(Gtk.Window): self.show_panel("printer_select", _("Printer Select"), remove_all=True) def websocket_disconnected(self, msg): + logging.debug("### websocket_disconnected") self.printer_initializing(msg, remove=True) self.printer.state = "disconnected" self.connecting = True @@ -663,6 +664,7 @@ class KlipperScreen(Gtk.Window): def state_disconnected(self): logging.debug("### Going to disconnected") + self.printer.stop_tempstore_updates() self.close_screensaver() self.initialized = False self.reinit_count = 0 @@ -704,6 +706,7 @@ class KlipperScreen(Gtk.Window): def state_shutdown(self): self.close_screensaver() + self.printer.stop_tempstore_updates() msg = self.printer.get_stat("webhooks", "state_message") msg = msg if "ready" not in msg else "" self.printer_initializing(_("Klipper has shutdown") + "\n\n" + msg, remove=True) @@ -977,8 +980,6 @@ class KlipperScreen(Gtk.Window): extra_items)) if data is False: return self._init_printer("Error getting printer object data with extra items") - if len(self.printer.get_temp_devices()) > 0: - self.init_tempstore() self.files.set_gcodes_path() self.files.refresh_files() @@ -992,6 +993,8 @@ class KlipperScreen(Gtk.Window): return False def init_tempstore(self): + if len(self.printer.get_temp_devices()) == 0: + return tempstore = self.apiclient.send_request("server/temperature_store") if tempstore and 'result' in tempstore and tempstore['result']: self.printer.init_temp_store(tempstore['result'])