diff --git a/panels/splash_screen.py b/panels/splash_screen.py index 1decf404..1dfdfa52 100644 --- a/panels/splash_screen.py +++ b/panels/splash_screen.py @@ -70,30 +70,47 @@ class SplashScreenPanel(ScreenPanel): if "firmware_restart" not in self.labels: self.labels['menu'] = self._gtk.ButtonImage("settings", _("Menu"), "color4") self.labels['menu'].connect("clicked", self._screen._go_to_submenu, "") - self.labels['power'] = self._gtk.ButtonImage("shutdown", _("Power"), "color3") self.labels['restart'] = self._gtk.ButtonImage("refresh", _("Restart"), "color1") self.labels['restart'].connect("clicked", self.restart) self.labels['firmware_restart'] = self._gtk.ButtonImage("refresh", _("Firmware Restart"), "color2") self.labels['firmware_restart'].connect("clicked", self.firmware_restart) + self.labels['power'] = self._gtk.ButtonImage("shutdown", _("Power On Printer"), "color3") self.clear_action_bar() if self._printer is not None: - devices = [i for i in self._printer.get_power_devices()] - logging.debug("Power devices: %s" % devices) - if len(devices) > 0: - logging.debug("Adding power button") - self.labels['power'].connect("clicked", self.menu_item_clicked, "power", { - "name": "Power", - "panel": "power" - }) - self.labels['actions'].add(self.labels['power']) + logging.debug("Connected to %s", self._screen.connected_printer) + connecting = self._screen.connecting_to_printer + if connecting is not None: + printer = connecting + else: + printer = None + logging.debug("Connecting to %s", connecting) + devices = self._printer.get_power_devices() + logging.debug("Power devices: %s", devices) + for device in devices: + if printer == device: + logging.info("Found %s in power devices, Adding power button", printer) + self.labels['actions'].add(self.labels['power']) + self.labels['power'].connect("clicked", self.power_on, device) + if self._screen.printer.get_power_device_status(device) == "off": + logging.info("Printer is OFF") + else: + logging.info("Printer is ON") + break + else: + logging.info("%s not found in power devices", printer) self.labels['actions'].add(self.labels['restart']) self.labels['actions'].add(self.labels['firmware_restart']) self.labels['actions'].add(self.labels['menu']) self.labels['actions'].show_all() + def power_on(self, widget, device): + _ = self.lang.gettext + self._screen.show_popup_message(_("Sending Power ON signal"), level=1) + self._screen._ws.klippy.power_device_on(device) + def firmware_restart(self, widget): self._screen._ws.klippy.restart_firmware() diff --git a/screen.py b/screen.py index 6aba7282..fe70fd71 100644 --- a/screen.py +++ b/screen.py @@ -62,6 +62,7 @@ class KlipperScreen(Gtk.Window): _cur_panels = [] bed_temp_label = None connecting = False + connecting_to_printer = None connected_printer = None currentPanel = None files = None @@ -159,7 +160,7 @@ class KlipperScreen(Gtk.Window): def connect_printer(self, name): _ = self.lang.gettext - + self.connecting_to_printer = name if self.connected_printer == name: if self.printer_select_prepanel is not None: self.show_panel(self.printer_select_prepanel, "", "", 2) @@ -227,12 +228,6 @@ class KlipperScreen(Gtk.Window): "shutdown": self.state_shutdown }) - powerdevs = self.apiclient.send_request("machine/device_power/devices") - logging.debug("Found power devices: %s" % powerdevs) - if powerdevs is not False: - self.printer.configure_power_devices(powerdevs['result']) - self.panels['splash_screen'].show_restart_buttons() - self._ws = KlippyWebsocket(self, { "on_connect": self.init_printer, @@ -242,6 +237,24 @@ class KlipperScreen(Gtk.Window): data["moonraker_host"], data["moonraker_port"] ) + + powerdevs = self.apiclient.send_request("machine/device_power/devices") + if powerdevs is not False: + self.printer.configure_power_devices(powerdevs['result']) + self.panels['splash_screen'].show_restart_buttons() + # Printer auto power on during initial connect + # it should be manual on reinit because the user could be turning it off on purpose + #devices = self.printer.get_power_devices() + #for device in devices: + #if name == device: + #logging.info("Found %s in power devices", name) + #if self.printer.get_power_device_status(device) == "off": + #logging.info("Printer is OFF, sending Power ON") + #self._ws.klippy.power_device_on(device) + #break + #else: + #logging.info("%s not found in power devices", name) + self.files = KlippyFiles(self) self._ws.initial_connect() self.connecting = False @@ -898,6 +911,7 @@ class KlipperScreen(Gtk.Window): if powerdevs is not False: self.printer.configure_power_devices(powerdevs['result']) + self.panels['splash_screen'].show_restart_buttons() def printer_ready(self): _ = self.lang.gettext