screen: Initial update to allow several moonraker connections
This commit is contained in:
parent
054f7c72db
commit
57aa7e6e85
149
screen.py
149
screen.py
@ -31,6 +31,21 @@ from ks_includes.printer import Printer
|
|||||||
|
|
||||||
from ks_includes.config import KlipperScreenConfig
|
from ks_includes.config import KlipperScreenConfig
|
||||||
|
|
||||||
|
PRINTER_BASE_STATUS_OBJECTS = [
|
||||||
|
'bed_mesh',
|
||||||
|
'idle_timeout',
|
||||||
|
'configfile',
|
||||||
|
'gcode_move',
|
||||||
|
'fan',
|
||||||
|
'toolhead',
|
||||||
|
'virtual_sdcard',
|
||||||
|
'print_stats',
|
||||||
|
'heater_bed',
|
||||||
|
'extruder',
|
||||||
|
'pause_resume',
|
||||||
|
'webhooks'
|
||||||
|
]
|
||||||
|
|
||||||
# Create logging
|
# Create logging
|
||||||
for h in logging.getLogger().handlers:
|
for h in logging.getLogger().handlers:
|
||||||
logging.getLogger().removeHandler(h)
|
logging.getLogger().removeHandler(h)
|
||||||
@ -62,6 +77,7 @@ class KlipperScreen(Gtk.Window):
|
|||||||
""" Class for creating a screen for Klipper via HDMI """
|
""" Class for creating a screen for Klipper via HDMI """
|
||||||
_cur_panels = []
|
_cur_panels = []
|
||||||
bed_temp_label = None
|
bed_temp_label = None
|
||||||
|
connected_printer = None
|
||||||
currentPanel = None
|
currentPanel = None
|
||||||
files = None
|
files = None
|
||||||
filename = ""
|
filename = ""
|
||||||
@ -76,6 +92,7 @@ class KlipperScreen(Gtk.Window):
|
|||||||
rtl_languages = ['he_il']
|
rtl_languages = ['he_il']
|
||||||
subscriptions = []
|
subscriptions = []
|
||||||
shutdown = True
|
shutdown = True
|
||||||
|
_ws = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.version = get_software_version()
|
self.version = get_software_version()
|
||||||
@ -91,28 +108,6 @@ class KlipperScreen(Gtk.Window):
|
|||||||
|
|
||||||
self.lang = gettext.translation('KlipperScreen', localedir='ks_includes/locales', fallback=True)
|
self.lang = gettext.translation('KlipperScreen', localedir='ks_includes/locales', fallback=True)
|
||||||
self._config = KlipperScreenConfig(configfile, self.lang, self)
|
self._config = KlipperScreenConfig(configfile, self.lang, self)
|
||||||
self.printer = Printer({
|
|
||||||
"software_version": "Unknown"
|
|
||||||
}, {
|
|
||||||
'configfile': {
|
|
||||||
'config': {}
|
|
||||||
},
|
|
||||||
'print_stats': {
|
|
||||||
'state': 'disconnected'
|
|
||||||
},
|
|
||||||
'virtual_sdcard': {
|
|
||||||
'is_active': False
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
self.printer.set_callbacks({
|
|
||||||
"disconnected": self.state_disconnected,
|
|
||||||
"error": self.state_error,
|
|
||||||
"printing": self.state_printing,
|
|
||||||
"ready": self.state_ready,
|
|
||||||
"startup": self.state_startup,
|
|
||||||
"shutdown": self.state_shutdown
|
|
||||||
})
|
|
||||||
|
|
||||||
logger.debug("OS Language: %s" % os.getenv('LANG'))
|
logger.debug("OS Language: %s" % os.getenv('LANG'))
|
||||||
|
|
||||||
@ -126,14 +121,6 @@ class KlipperScreen(Gtk.Window):
|
|||||||
|
|
||||||
_ = self.lang.gettext
|
_ = self.lang.gettext
|
||||||
|
|
||||||
self.apiclient = KlippyRest(self._config.get_main_config_option("moonraker_host"),
|
|
||||||
self._config.get_main_config_option("moonraker_port"),
|
|
||||||
self._config.get_main_config_option("moonraker_api_key", False))
|
|
||||||
|
|
||||||
powerdevs = self.apiclient.send_request("machine/device_power/devices")
|
|
||||||
if powerdevs != False:
|
|
||||||
self.printer.configure_power_devices(powerdevs['result'])
|
|
||||||
|
|
||||||
Gtk.Window.__init__(self)
|
Gtk.Window.__init__(self)
|
||||||
self.width = self._config.get_main_config().getint("width", Gdk.Screen.get_width(Gdk.Screen.get_default()))
|
self.width = self._config.get_main_config().getint("width", Gdk.Screen.get_width(Gdk.Screen.get_default()))
|
||||||
self.height = self._config.get_main_config().getint("height", Gdk.Screen.get_height(Gdk.Screen.get_default()))
|
self.height = self._config.get_main_config().getint("height", Gdk.Screen.get_height(Gdk.Screen.get_default()))
|
||||||
@ -148,6 +135,66 @@ class KlipperScreen(Gtk.Window):
|
|||||||
|
|
||||||
self.printer_initializing(_("Initializing"))
|
self.printer_initializing(_("Initializing"))
|
||||||
|
|
||||||
|
# Disable DPMS
|
||||||
|
os.system("/usr/bin/xset -display :0 -dpms")
|
||||||
|
self.set_screenblanking_timeout(self._config.get_main_config_option('screen_blanking'))
|
||||||
|
|
||||||
|
# Change cursor to blank
|
||||||
|
#self.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.BLANK_CURSOR))
|
||||||
|
pname = list(self._config.get_printers()[0])[0]
|
||||||
|
self.connect_printer(pname, self._config.get_printers()[0][pname])
|
||||||
|
|
||||||
|
def connect_printer(self, name, data):
|
||||||
|
_ = self.lang.gettext
|
||||||
|
|
||||||
|
if self.connected_printer == name:
|
||||||
|
return
|
||||||
|
|
||||||
|
if self.files is not None:
|
||||||
|
self.files.stop()
|
||||||
|
|
||||||
|
self.apiclient = KlippyRest(self._config.get_main_config_option("moonraker_host"),
|
||||||
|
self._config.get_main_config_option("moonraker_port"),
|
||||||
|
self._config.get_main_config_option("moonraker_api_key", False))
|
||||||
|
|
||||||
|
self.printer = Printer({
|
||||||
|
"software_version": "Unknown"
|
||||||
|
}, {
|
||||||
|
'configfile': {
|
||||||
|
'config': {}
|
||||||
|
},
|
||||||
|
'print_stats': {
|
||||||
|
'state': 'disconnected'
|
||||||
|
},
|
||||||
|
'virtual_sdcard': {
|
||||||
|
'is_active': False
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
self._remove_all_panels()
|
||||||
|
panels = list(self.panels)
|
||||||
|
for panel in panels:
|
||||||
|
del self.panels[panel]
|
||||||
|
self.printer_initializing(_("Connecting to %s") % name)
|
||||||
|
|
||||||
|
self.printer.set_callbacks({
|
||||||
|
"disconnected": self.state_disconnected,
|
||||||
|
"error": self.state_error,
|
||||||
|
"printing": self.state_printing,
|
||||||
|
"ready": self.state_ready,
|
||||||
|
"startup": self.state_startup,
|
||||||
|
"shutdown": self.state_shutdown
|
||||||
|
})
|
||||||
|
|
||||||
|
powerdevs = self.apiclient.send_request("machine/device_power/devices")
|
||||||
|
logger.debug("Found power devices: %s" % powerdevs)
|
||||||
|
if powerdevs != False:
|
||||||
|
self.printer.configure_power_devices(powerdevs['result'])
|
||||||
|
self.panels['splash_screen'].show_restart_buttons()
|
||||||
|
|
||||||
|
if self._ws is not None:
|
||||||
|
self._ws.close
|
||||||
|
|
||||||
self._ws = KlippyWebsocket(self,
|
self._ws = KlippyWebsocket(self,
|
||||||
{
|
{
|
||||||
"on_connect": self.init_printer,
|
"on_connect": self.init_printer,
|
||||||
@ -159,14 +206,11 @@ class KlipperScreen(Gtk.Window):
|
|||||||
)
|
)
|
||||||
self._ws.initial_connect()
|
self._ws.initial_connect()
|
||||||
|
|
||||||
# Disable DPMS
|
self.files = KlippyFiles(self)
|
||||||
os.system("/usr/bin/xset -display :0 -dpms")
|
self.files.start()
|
||||||
self.set_screenblanking_timeout(self._config.get_main_config_option('screen_blanking'))
|
|
||||||
|
|
||||||
# Change cursor to blank
|
self.connected_printer = name
|
||||||
self.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.BLANK_CURSOR))
|
logger.debug("Connected to printer: %s" % name)
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
def ws_subscribe(self):
|
def ws_subscribe(self):
|
||||||
requested_updates = {
|
requested_updates = {
|
||||||
@ -318,7 +362,6 @@ class KlipperScreen(Gtk.Window):
|
|||||||
def error_modal_response(self, widget, response_id):
|
def error_modal_response(self, widget, response_id):
|
||||||
widget.destroy()
|
widget.destroy()
|
||||||
|
|
||||||
|
|
||||||
def init_style(self):
|
def init_style(self):
|
||||||
style_provider = Gtk.CssProvider()
|
style_provider = Gtk.CssProvider()
|
||||||
#style_provider.load_from_path(klipperscreendir + "/style.css")
|
#style_provider.load_from_path(klipperscreendir + "/style.css")
|
||||||
@ -535,31 +578,11 @@ class KlipperScreen(Gtk.Window):
|
|||||||
def init_printer(self):
|
def init_printer(self):
|
||||||
_ = self.lang.gettext
|
_ = self.lang.gettext
|
||||||
|
|
||||||
status_objects = [
|
|
||||||
'bed_mesh',
|
|
||||||
'idle_timeout',
|
|
||||||
'configfile',
|
|
||||||
'gcode_move',
|
|
||||||
'fan',
|
|
||||||
'toolhead',
|
|
||||||
'virtual_sdcard',
|
|
||||||
'print_stats',
|
|
||||||
'heater_bed',
|
|
||||||
'extruder',
|
|
||||||
'pause_resume',
|
|
||||||
'webhooks'
|
|
||||||
]
|
|
||||||
printer_info = self.apiclient.get_printer_info()
|
printer_info = self.apiclient.get_printer_info()
|
||||||
logger.debug("Sending request %s" % "printer/objects/query?" + "&".join(status_objects))
|
data = self.apiclient.send_request("printer/objects/query?" + "&".join(PRINTER_BASE_STATUS_OBJECTS))
|
||||||
data = self.apiclient.send_request("printer/objects/query?" + "&".join(status_objects))
|
|
||||||
powerdevs = self.apiclient.send_request("machine/device_power/devices")
|
powerdevs = self.apiclient.send_request("machine/device_power/devices")
|
||||||
data = data['result']['status']
|
data = data['result']['status']
|
||||||
|
|
||||||
if self.files == None:
|
|
||||||
self.files = KlippyFiles(self)
|
|
||||||
else:
|
|
||||||
self.files.add_timeout()
|
|
||||||
|
|
||||||
# Reinitialize printer, in case the printer was shut down and anything has changed.
|
# Reinitialize printer, in case the printer was shut down and anything has changed.
|
||||||
self.printer.reinit(printer_info['result'], data)
|
self.printer.reinit(printer_info['result'], data)
|
||||||
self.ws_subscribe()
|
self.ws_subscribe()
|
||||||
@ -571,15 +594,14 @@ class KlipperScreen(Gtk.Window):
|
|||||||
self.close_popup_message()
|
self.close_popup_message()
|
||||||
# Force update to printer webhooks state in case the update is missed due to websocket subscribe not yet sent
|
# Force update to printer webhooks state in case the update is missed due to websocket subscribe not yet sent
|
||||||
self.printer.process_update({"webhooks":{"state":"ready","state_message": "Printer is ready"}})
|
self.printer.process_update({"webhooks":{"state":"ready","state_message": "Printer is ready"}})
|
||||||
self.show_panel('main_panel', "main_menu", "Main Menu", 2, items=self._config.get_menu_items("__main"),
|
self.show_panel('main_panel', "main_menu", self.connected_printer, 2,
|
||||||
extrudercount=self.printer.get_extruder_count())
|
items=self._config.get_menu_items("__main"), extrudercount=self.printer.get_extruder_count())
|
||||||
self.ws_subscribe()
|
self.ws_subscribe()
|
||||||
if "job_status" in self.panels:
|
if "job_status" in self.panels:
|
||||||
self.remove_subscription("job_status")
|
self.remove_subscription("job_status")
|
||||||
del self.panels["job_status"]
|
del self.panels["job_status"]
|
||||||
|
|
||||||
def printer_printing(self):
|
def printer_printing(self):
|
||||||
self.files.remove_timeout()
|
|
||||||
self.close_popup_message()
|
self.close_popup_message()
|
||||||
self.show_panel('job_status',"job_status", "Print Status", 2)
|
self.show_panel('job_status',"job_status", "Print Status", 2)
|
||||||
|
|
||||||
@ -618,7 +640,6 @@ class KlipperScreen(Gtk.Window):
|
|||||||
"socket": keyboard
|
"socket": keyboard
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def remove_keyboard(self, widget=None):
|
def remove_keyboard(self, widget=None):
|
||||||
if self.keyboard is None:
|
if self.keyboard is None:
|
||||||
return
|
return
|
||||||
@ -627,7 +648,6 @@ class KlipperScreen(Gtk.Window):
|
|||||||
os.kill(self.keyboard['process'].pid, signal.SIGTERM)
|
os.kill(self.keyboard['process'].pid, signal.SIGTERM)
|
||||||
self.keyboard = None
|
self.keyboard = None
|
||||||
|
|
||||||
|
|
||||||
def get_software_version():
|
def get_software_version():
|
||||||
prog = ('git', '-C', os.path.dirname(__file__), 'describe', '--always',
|
prog = ('git', '-C', os.path.dirname(__file__), 'describe', '--always',
|
||||||
'--tags', '--long', '--dirty')
|
'--tags', '--long', '--dirty')
|
||||||
@ -648,7 +668,6 @@ def get_software_version():
|
|||||||
return "?"
|
return "?"
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
||||||
win = KlipperScreen()
|
win = KlipperScreen()
|
||||||
win.connect("destroy", Gtk.main_quit)
|
win.connect("destroy", Gtk.main_quit)
|
||||||
win.show_all()
|
win.show_all()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user