feat: turn on_off power devices with the screensaver close #518
This commit is contained in:
parent
45e1f652db
commit
06bf269862
@ -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)
|
# To define a full set of custom menues (instead of merging user entries with default entries)
|
||||||
# set this to False. See Menu section below.
|
# set this to False. See Menu section below.
|
||||||
use_default_menu: True
|
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
|
## Printer Options
|
||||||
|
@ -152,7 +152,7 @@ class KlipperScreenConfig:
|
|||||||
)
|
)
|
||||||
strs = (
|
strs = (
|
||||||
'default_printer', 'language', 'print_sort_dir', 'theme', 'screen_blanking', 'font_size',
|
'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 = (
|
numbers = (
|
||||||
'job_complete_timeout', 'job_error_timeout', 'move_speed_xy', 'move_speed_z',
|
'job_complete_timeout', 'job_error_timeout', 'move_speed_xy', 'move_speed_z',
|
||||||
|
@ -74,10 +74,9 @@ class SplashScreenPanel(ScreenPanel):
|
|||||||
self.clear_action_bar()
|
self.clear_action_bar()
|
||||||
if self.ks_printer_cfg is not None and self._screen._ws.connected:
|
if self.ks_printer_cfg is not None and self._screen._ws.connected:
|
||||||
power_devices = self.ks_printer_cfg.get("power_devices", "")
|
power_devices = self.ks_printer_cfg.get("power_devices", "")
|
||||||
power_devices = [str(i.strip()) for i in power_devices.split(',')]
|
if power_devices:
|
||||||
if power_devices[0]:
|
|
||||||
logging.info(f"Associated power devices: {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:
|
if self._screen.initialized:
|
||||||
self.labels['actions'].add(self.labels['restart'])
|
self.labels['actions'].add(self.labels['restart'])
|
||||||
@ -91,11 +90,10 @@ class SplashScreenPanel(ScreenPanel):
|
|||||||
self.labels['actions'].show_all()
|
self.labels['actions'].show_all()
|
||||||
|
|
||||||
def add_power_button(self, powerdevs):
|
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'] = self._gtk.Button("shutdown", _("Power On Printer"), "color3")
|
self.labels['power'].connect("clicked", self._screen.power_devices, powerdevs, True)
|
||||||
self.labels['power'].connect("clicked", self._screen.power_on, powerdevs)
|
self.check_power_status()
|
||||||
self.check_power_status()
|
self.labels['actions'].add(self.labels['power'])
|
||||||
self.labels['actions'].add(self.labels['power'])
|
|
||||||
|
|
||||||
def activate(self):
|
def activate(self):
|
||||||
self.check_power_status()
|
self.check_power_status()
|
||||||
|
40
screen.py
40
screen.py
@ -540,6 +540,7 @@ class KlipperScreen(Gtk.Window):
|
|||||||
close.grab_focus()
|
close.grab_focus()
|
||||||
self.screensaver = box
|
self.screensaver = box
|
||||||
self.screensaver.show_all()
|
self.screensaver.show_all()
|
||||||
|
self.power_devices(None, self._config.get_main_config().get("screen_off_devices", ""), on=False)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def close_screensaver(self, widget=None):
|
def close_screensaver(self, widget=None):
|
||||||
@ -556,6 +557,7 @@ class KlipperScreen(Gtk.Window):
|
|||||||
logging.info(f"Restoring Dialog {dialog}")
|
logging.info(f"Restoring Dialog {dialog}")
|
||||||
dialog.show()
|
dialog.show()
|
||||||
self.show_all()
|
self.show_all()
|
||||||
|
self.power_devices(None, self._config.get_main_config().get("screen_on_devices", ""), on=True)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def check_dpms_state(self):
|
def check_dpms_state(self):
|
||||||
@ -789,32 +791,24 @@ class KlipperScreen(Gtk.Window):
|
|||||||
self.show_panel('splash_screen', "splash_screen", None, 2)
|
self.show_panel('splash_screen', "splash_screen", None, 2)
|
||||||
self.panels['splash_screen'].update_text(msg)
|
self.panels['splash_screen'].update_text(msg)
|
||||||
|
|
||||||
def search_power_devices(self, power_devices):
|
def search_power_devices(self, devices):
|
||||||
if self.connected_printer is None or not power_devices:
|
|
||||||
return
|
|
||||||
found_devices = []
|
found_devices = []
|
||||||
devices = self.printer.get_power_devices()
|
if self.connected_printer is None or not 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)
|
|
||||||
return found_devices
|
return found_devices
|
||||||
else:
|
devices = [str(i.strip()) for i in devices.split(',')]
|
||||||
logging.info("Associated power devices not found")
|
power_devices = self.printer.get_power_devices()
|
||||||
return None
|
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):
|
def power_devices(self, widget=None, devices=None, on=False):
|
||||||
for device in devices:
|
devs = self.search_power_devices(devices)
|
||||||
if self.printer.get_power_device_status(device) == "off":
|
for dev in devs:
|
||||||
self.show_popup_message(_("Sending Power ON signal to: %s") % devices, level=1)
|
if on:
|
||||||
logging.info("%s is OFF, Sending Power ON signal", device)
|
self._ws.klippy.power_device_on(dev)
|
||||||
self._ws.klippy.power_device_on(device)
|
else:
|
||||||
elif self.printer.get_power_device_status(device) == "on":
|
self._ws.klippy.power_device_off(dev)
|
||||||
logging.info("%s is ON", device)
|
|
||||||
|
|
||||||
def init_printer(self):
|
def init_printer(self):
|
||||||
if self.reinit_count > self.max_retries or 'printer_select' in self._cur_panels:
|
if self.reinit_count > self.max_retries or 'printer_select' in self._cur_panels:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user