From 06bf26986226ddce929a5761757d7d98c594dbdf Mon Sep 17 00:00:00 2001 From: alfrix Date: Mon, 5 Dec 2022 11:40:05 -0300 Subject: [PATCH] feat: turn on_off power devices with the screensaver close #518 --- docs/Configuration.md | 4 ++++ ks_includes/config.py | 2 +- panels/splash_screen.py | 14 ++++++-------- screen.py | 40 +++++++++++++++++----------------------- 4 files changed, 28 insertions(+), 32 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index 06124586..a77e4c19 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -32,6 +32,10 @@ default_printer: Ender 3 Pro # To define a full set of custom menues (instead of merging user entries with default entries) # set this to False. See Menu section below. use_default_menu: True + +# Define one or more moonraker power devices that turn on/off with the screensaver (CSV list) +screen_on_devices: example1, example2 +screen_off_devices: example1, example2 ``` ## Printer Options diff --git a/ks_includes/config.py b/ks_includes/config.py index bf8be1c2..0b193bac 100644 --- a/ks_includes/config.py +++ b/ks_includes/config.py @@ -152,7 +152,7 @@ class KlipperScreenConfig: ) strs = ( 'default_printer', 'language', 'print_sort_dir', 'theme', 'screen_blanking', 'font_size', - 'print_estimate_method', 'screen_blanking' + 'print_estimate_method', 'screen_blanking', "screen_on_devices", "screen_off_devices", ) numbers = ( 'job_complete_timeout', 'job_error_timeout', 'move_speed_xy', 'move_speed_z', diff --git a/panels/splash_screen.py b/panels/splash_screen.py index 17d72ecf..32669d88 100644 --- a/panels/splash_screen.py +++ b/panels/splash_screen.py @@ -74,10 +74,9 @@ class SplashScreenPanel(ScreenPanel): self.clear_action_bar() if self.ks_printer_cfg is not None and self._screen._ws.connected: power_devices = self.ks_printer_cfg.get("power_devices", "") - power_devices = [str(i.strip()) for i in power_devices.split(',')] - if power_devices[0]: + if power_devices: logging.info(f"Associated power devices: {power_devices}") - self.add_power_button(self._screen.search_power_devices(power_devices)) + self.add_power_button(power_devices) if self._screen.initialized: self.labels['actions'].add(self.labels['restart']) @@ -91,11 +90,10 @@ class SplashScreenPanel(ScreenPanel): self.labels['actions'].show_all() def add_power_button(self, powerdevs): - if powerdevs is not None: - self.labels['power'] = self._gtk.Button("shutdown", _("Power On Printer"), "color3") - self.labels['power'].connect("clicked", self._screen.power_on, powerdevs) - self.check_power_status() - self.labels['actions'].add(self.labels['power']) + self.labels['power'] = self._gtk.Button("shutdown", _("Power On Printer"), "color3") + self.labels['power'].connect("clicked", self._screen.power_devices, powerdevs, True) + self.check_power_status() + self.labels['actions'].add(self.labels['power']) def activate(self): self.check_power_status() diff --git a/screen.py b/screen.py index aa1e1b7a..4a6ff186 100755 --- a/screen.py +++ b/screen.py @@ -540,6 +540,7 @@ class KlipperScreen(Gtk.Window): close.grab_focus() self.screensaver = box self.screensaver.show_all() + self.power_devices(None, self._config.get_main_config().get("screen_off_devices", ""), on=False) return False def close_screensaver(self, widget=None): @@ -556,6 +557,7 @@ class KlipperScreen(Gtk.Window): logging.info(f"Restoring Dialog {dialog}") dialog.show() self.show_all() + self.power_devices(None, self._config.get_main_config().get("screen_on_devices", ""), on=True) return False def check_dpms_state(self): @@ -789,32 +791,24 @@ class KlipperScreen(Gtk.Window): self.show_panel('splash_screen', "splash_screen", None, 2) self.panels['splash_screen'].update_text(msg) - def search_power_devices(self, power_devices): - if self.connected_printer is None or not power_devices: - return + def search_power_devices(self, devices): found_devices = [] - devices = self.printer.get_power_devices() - logging.debug("Power devices: %s", devices) - if devices is not None: - for device in devices: - for power_device in power_devices: - if device == power_device and power_device not in found_devices: - found_devices.append(power_device) - if found_devices: - logging.info("Found %s", found_devices) + if self.connected_printer is None or not devices: return found_devices - else: - logging.info("Associated power devices not found") - return None + devices = [str(i.strip()) for i in devices.split(',')] + power_devices = self.printer.get_power_devices() + if power_devices: + found_devices = [dev for dev in devices if dev in power_devices] + logging.info(f"Found {found_devices}", ) + return found_devices - def power_on(self, widget, devices): - for device in devices: - if self.printer.get_power_device_status(device) == "off": - self.show_popup_message(_("Sending Power ON signal to: %s") % devices, level=1) - logging.info("%s is OFF, Sending Power ON signal", device) - self._ws.klippy.power_device_on(device) - elif self.printer.get_power_device_status(device) == "on": - logging.info("%s is ON", device) + def power_devices(self, widget=None, devices=None, on=False): + devs = self.search_power_devices(devices) + for dev in devs: + if on: + self._ws.klippy.power_device_on(dev) + else: + self._ws.klippy.power_device_off(dev) def init_printer(self): if self.reinit_count > self.max_retries or 'printer_select' in self._cur_panels: