diff --git a/KlippyWebsocket.py b/KlippyWebsocket.py index adb5bf12..f8078c1c 100644 --- a/KlippyWebsocket.py +++ b/KlippyWebsocket.py @@ -9,6 +9,7 @@ import requests import websocket import asyncio import logging +logger = logging.getLogger("KlipperScreen.KlipperWebsocket") gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk, GLib @@ -30,6 +31,7 @@ api = { "url": "/access/oneshot_token" } } + class KlippyWebsocket(threading.Thread): _req_id = 0 connected = False @@ -50,7 +52,7 @@ class KlippyWebsocket(threading.Thread): headers={"x-api-key":api_key} ) if r.status_code != 200: - logging.info("Failed to retrieve oneshot token") + logger.info("Failed to retrieve oneshot token") return token = json.loads(r.content)['result'] @@ -109,12 +111,12 @@ class KlippyWebsocket(threading.Thread): def on_open(self, ws): print("### ws open ###") - logging.info("### ws open ###") + logger.info("### ws open ###") self.connected = True def on_close(self, ws): print("### ws closed ###") - logging.info("### ws closed ###") + logger.info("### ws closed ###") self.connected = False # TODO: Make non-blocking @@ -146,11 +148,13 @@ class MoonrakerApi: self._ws = ws def emergency_stop(self): + logger.info("Sending printer.emergency_stop") self._ws.send_method( "printer.emergency_stop" ) def gcode_script(self, script, callback=None, *args): + logger.debug("Sending printer.gcode.script: %s", script) self._ws.send_method( "printer.gcode.script", {"script": script}, @@ -159,6 +163,7 @@ class MoonrakerApi: ) def get_file_list(self, callback=None, *args): + logger.debug("Sending server.files.list") self._ws.send_method( "server.files.list", {}, @@ -167,6 +172,7 @@ class MoonrakerApi: ) def get_file_metadata(self, filename, callback=None, *args): + logger.debug("Sending server.files.metadata: %s", filename) self._ws.send_method( "server.files.metadata", {"filename": filename}, @@ -175,12 +181,14 @@ class MoonrakerApi: ) def object_subscription(self, updates): + logger.debug("Sending printer.objects.subscribe: %s", str(updates)) self._ws.send_method( "printer.objects.subscribe", updates ) def print_cancel(self, callback=None, *args): + logger.debug("Sending printer.print.cancel") self._ws.send_method( "printer.print.cancel", {}, @@ -189,6 +197,7 @@ class MoonrakerApi: ) def print_pause(self, callback=None, *args): + logger.debug("Sending printer.print.pause") self._ws.send_method( "printer.print.pause", {}, @@ -197,6 +206,7 @@ class MoonrakerApi: ) def print_resume(self, callback=None, *args): + logger.debug("Sending printer.print.resume") self._ws.send_method( "printer.print.resume", {}, @@ -205,6 +215,7 @@ class MoonrakerApi: ) def print_start(self, filename, callback=None, *args): + logger.debug("Sending printer.print.start") self._ws.send_method( "printer.print.start", { @@ -216,6 +227,7 @@ class MoonrakerApi: def temperature_set(self, heater, target, callback=None, *args): if heater == "heater_bed": + logger.debug("Sending printer.gcode.script: %s", KlippyGcodes.set_bed_temp(target)) self._ws.send_method( "printer.gcode.script", { @@ -225,6 +237,8 @@ class MoonrakerApi: *args ) else: + logger.debug("Sending printer.gcode.script: %s", + KlippyGcodes.set_ext_temp(target, heater.replace("tool",""))) #TODO: Add max/min limits self._ws.send_method( "printer.gcode.script", @@ -236,6 +250,7 @@ class MoonrakerApi: ) def set_bed_temp(self, target, callback=None, *args): + logger.debug("Sending set_bed_temp: %s", KlippyGcodes.set_bed_temp(target)) self._ws.send_method( "printer.gcode.script", { @@ -246,6 +261,7 @@ class MoonrakerApi: ) def set_tool_temp(self, tool, target, callback=None, *args): + logger.debug("Sending set_tool_temp: %s", KlippyGcodes.set_ext_temp(target, tool)) self._ws.send_method( "printer.gcode.script", { @@ -256,11 +272,13 @@ class MoonrakerApi: ) def restart(self): + logger.debug("Sending printer.restart") self._ws.send_method( "printer.restart" ) def restart_firmware(self): + logger.debug("Sending printer.firmware_restart") self._ws.send_method( "printer.firmware_restart" ) diff --git a/panels/zcalibrate.py b/panels/zcalibrate.py index bf0b6334..a9ef09c3 100644 --- a/panels/zcalibrate.py +++ b/panels/zcalibrate.py @@ -6,6 +6,9 @@ from gi.repository import Gtk, Gdk, GLib from KlippyGtk import KlippyGtk from KlippyGcodes import KlippyGcodes +import logging +logger = logging.getLogger("KlipperScreen.ZCalibratePanel") + class ZCalibratePanel: _screen = None labels = {} @@ -117,13 +120,15 @@ class ZCalibratePanel: def move(self, widget, dir): dist = str(self.distance) if dir == "+" else "-" + str(self.distance) - print("# Moving " + KlippyGcodes.probe_move(dist)) + logger.info("# Moving %s", KlippyGcodes.probe_move(dist)) self._screen._ws.klippy.gcode_script(KlippyGcodes.probe_move(dist)) def abort(self, widget): + logger.info("Aborting Z calibrate") self._screen._ws.klippy.gcode_script(KlippyGcodes.PROBE_ABORT) self._screen._menu_go_back(widget) def accept(self, widget): + logger.info("Accepting Z calibrate") self._screen._ws.klippy.gcode_script(KlippyGcodes.PROBE_ACCEPT) self._screen._ws.klippy.gcode_script(KlippyGcodes.SAVE_CONFIG) diff --git a/screen.py b/screen.py index c8b98a05..0cd38c99 100644 --- a/screen.py +++ b/screen.py @@ -39,11 +39,26 @@ from panels.system import * from panels.temperature import * from panels.zcalibrate import * -logging.basicConfig(filename="/tmp/KlipperScreen.log", level=logging.INFO) +# Create logging +logger = logging.getLogger('KlipperScreen') +logger.setLevel(logging.DEBUG) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + +fh = logging.FileHandler('/tmp/KlipperScreen.log') +fh.setLevel(logging.DEBUG) +fh.setFormatter(formatter) + +ch = logging.StreamHandler() +ch.setLevel(logging.ERROR) +ch.setFormatter(formatter) + +logger.addHandler(fh) +logger.addHandler(ch) klipperscreendir = os.getcwd() config = klipperscreendir + "/KlipperScreen.config" -logging.info("Config file: " + config) +logger.warning("test test") +logger.info("Config file: " + config) class KlipperScreen(Gtk.Window): """ Class for creating a screen for Klipper via HDMI """ @@ -68,10 +83,15 @@ class KlipperScreen(Gtk.Window): self.set_default_size(Gdk.Screen.get_width(Gdk.Screen.get_default()), Gdk.Screen.get_height(Gdk.Screen.get_default())) self.set_resizable(False) - logging.info(str(Gdk.Screen.get_width(Gdk.Screen.get_default()))+"x"+str(Gdk.Screen.get_height(Gdk.Screen.get_default()))) + logger.info("Screen resolution: %s", str(Gdk.Screen.get_width(Gdk.Screen.get_default()))+"x"+str(Gdk.Screen.get_height(Gdk.Screen.get_default()))) self.printer_initializing("Connecting to Moonraker") + # Disable DPMS + os.system("/usr/bin/xset -display :0 s off") + os.system("/usr/bin/xset -display :0 -dpms") + os.system("/usr/bin/xset -display :0 s noblank") + ready = False try: @@ -86,7 +106,7 @@ class KlipperScreen(Gtk.Window): self.create_websocket() if info['result']['state'] == "ready" and "M112" in info['result']['state_message']: - print("Emergency stopped") + logger.warning("Printer is emergency stopped") self.printer_initializing("Shutdown due to Emergency Stop") status_objects = [ @@ -117,11 +137,9 @@ class KlipperScreen(Gtk.Window): self.last_update[x] = data[x] self.printer_config = data['configfile']['config'] - #self.read_printer_config() self.printer = Printer(data) # Initialize target values. TODO: methodize this - print (json.dumps(data, indent=2)) self.printer.set_dev_stat("heater_bed", "target", data['heater_bed']['target']) self.printer.set_dev_stat("extruder", "target", data['extruder']['target']) @@ -132,30 +150,13 @@ class KlipperScreen(Gtk.Window): self.printer_ready() while (self._ws.is_connected() == False): - print("### Main: Waiting for websocket") + logger.warning("### Main: Waiting for websocket") continue self.files = KlippyFiles(self) self._ws.klippy.object_subscription(requested_updates) - - - def read_printer_config(self): - logging.info("### Reading printer config") - self.toolcount = 0 - self.extrudercount = 0 - for x in self.printer_config.keys(): - if x.startswith('extruder'): - if x.startswith('extruder_stepper') or "shared_heater" in self.printer_config[x]: - self.toolcount += 1 - continue - self.extrudercount += 1 - - logging.info("### Toolcount: " + str(self.toolcount) + " Heaters: " + str(self.extrudercount)) - - self._printer = Printer(self.toolcount, self.extrudercount) - def show_panel(self, panel_name, type, remove=None, pop=True, **kwargs): if remove == 2: self._remove_all_panels() @@ -198,7 +199,6 @@ class KlipperScreen(Gtk.Window): self.panels[panel_name] = MovePanel(self) if kwargs != {}: - print(type) self.panels[panel_name].initialize(panel_name, **kwargs) else: self.panels[panel_name].initialize(panel_name) @@ -209,7 +209,7 @@ class KlipperScreen(Gtk.Window): self.add(self.panels[panel_name].get()) self.show_all() self._cur_panels.append(panel_name) - logging.info(self._cur_panels) + logger.debug("Current panel hierarchy: %s", str(self._cur_panels)) def read_config (self): @@ -234,7 +234,7 @@ class KlipperScreen(Gtk.Window): def _go_to_submenu(self, widget, name): - logging.info("#### Go to submenu " + str(name)) + logger.info("#### Go to submenu " + str(name)) #self._remove_current_panel(False) # Find current menu item @@ -245,10 +245,9 @@ class KlipperScreen(Gtk.Window): else: menu = self._config['printmenu'] - logging.info("#### Menu " + str(menu)) + logger.info("#### Menu " + str(menu)) #self.show_panel("_".join(self._cur_panels) + '_' + name, "menu", 1, False, menu=menu) - print(menu) self.show_panel(self._cur_panels[-1] + '_' + name, "menu", 1, False, items=menu) return @@ -291,7 +290,7 @@ class KlipperScreen(Gtk.Window): self.show_all() def _menu_go_back (self, widget): - logging.info("#### Menu go back") + logger.info("#### Menu go back") self._remove_current_panel() @@ -320,10 +319,10 @@ class KlipperScreen(Gtk.Window): if "webhooks" in data and "state" in data['webhooks']: if data['webhooks']['state'] == "shutdown": - logging.info("### Going to disconnected state") + logger.info("### Going to disconnected state") self.printer_initializing("Klipper has shutdown") elif data['webhooks']['state'] == "ready": - logging.info("### Going to ready state") + logger.info("### Going to ready state") self.printer_ready() else: active = self.printer.get_stat('virtual_sdcard','is_active') @@ -336,9 +335,10 @@ class KlipperScreen(Gtk.Window): self.printer_printing() - - - if action == "notify_status_update": + if action == "notify_filelist_changed": + logger.DEBUG("Filelist changed: %s", json.dumps(data,indent=2)) + #self.files.add_file() + elif action == "notify_status_update": if "heater_bed" in data: d = data["heater_bed"] if "target" in d: @@ -375,8 +375,6 @@ class KlipperScreen(Gtk.Window): self.show_panel('job_status',"JobStatusPanel", 2) def main(): - log_file = ("/tmp/KlipperScreen.log") - root_logger = logging.getLogger() win = KlipperScreen() win.connect("destroy", Gtk.main_quit) diff --git a/scripts/disablescreenblank.sh b/scripts/disablescreenblank.sh index 58a2ab04..9ec40b2b 100644 --- a/scripts/disablescreenblank.sh +++ b/scripts/disablescreenblank.sh @@ -3,7 +3,7 @@ screen=${1:-0} # wait for the display manager service to start and attach to screen -sleep 5 +sleep 15 /usr/bin/xset -display :$screen s off # deactivate screen saver /usr/bin/xset -display :$screen -dpms # disable DPMS