refactor printer initialization and connection handling

removes the lag while trying to connect
cleaner code, seems faster
This commit is contained in:
alfrix 2024-04-30 10:56:32 -03:00
parent 032760e118
commit ad2df873d3
8 changed files with 120 additions and 115 deletions

View File

@ -14,12 +14,15 @@ class KlippyRest:
def endpoint(self): def endpoint(self):
return f"{'https' if int(self.port) in {443, 7130} else 'http'}://{self.ip}:{self.port}" return f"{'https' if int(self.port) in {443, 7130} else 'http'}://{self.ip}:{self.port}"
@staticmethod
def process_response(response):
return response['result'] if response and 'result' in response else response
def get_server_info(self): def get_server_info(self):
return self.send_request("server/info") return self.send_request("server/info")
def get_oneshot_token(self): def get_oneshot_token(self):
res = self.send_request("access/oneshot_token") return self.send_request("access/oneshot_token")
return res['result'] if 'result' in res else False
def get_printer_info(self): def get_printer_info(self):
return self.send_request("printer/info") return self.send_request("printer/info")
@ -49,7 +52,8 @@ class KlippyRest:
return self._do_request(method, "post", data, json, json_response) return self._do_request(method, "post", data, json, json_response)
def send_request(self, method, json=True, timeout=4): def send_request(self, method, json=True, timeout=4):
return self._do_request(method, "get", json_response=json, timeout=timeout) res = self._do_request(method, "get", json_response=json, timeout=timeout)
return self.process_response(res) if json else res
@staticmethod @staticmethod
def format_status(status): def format_status(status):

View File

@ -20,17 +20,19 @@ class KlippyWebsocket(threading.Thread):
reconnect_count = 0 reconnect_count = 0
max_retries = 4 max_retries = 4
def __init__(self, screen, callback, host, port): def __init__(self, callback, host, port, api_key):
threading.Thread.__init__(self) threading.Thread.__init__(self)
self._wst = None self._wst = None
self.ws_url = None self.ws_url = None
self._screen = screen
self._callback = callback self._callback = callback
self.klippy = MoonrakerApi(self) self.klippy = MoonrakerApi(self)
self.ws = None self.ws = None
self.closing = False self.closing = False
self.host = host self.host = host
self.port = port self.port = port
self.header = {"x-api-key": api_key} if api_key else {}
self.api_key = api_key
self.reconnect_count = 0
@property @property
def _url(self): def _url(self):
@ -40,11 +42,6 @@ class KlippyWebsocket(threading.Thread):
def ws_proto(self): def ws_proto(self):
return "wss" if int(self.port) in {443, 7130} else "ws" return "wss" if int(self.port) in {443, 7130} else "ws"
def retry(self):
self.reconnect_count = 0
self.connecting = True
self.initial_connect()
def initial_connect(self): def initial_connect(self):
if self.connect() is not False: if self.connect() is not False:
GLib.timeout_add_seconds(10, self.reconnect) GLib.timeout_add_seconds(10, self.reconnect)
@ -53,9 +50,7 @@ class KlippyWebsocket(threading.Thread):
if self.reconnect_count > self.max_retries: if self.reconnect_count > self.max_retries:
logging.debug("Stopping reconnections") logging.debug("Stopping reconnections")
self.connecting = False self.connecting = False
self._screen.printer_initializing( GLib.idle_add(self._callback['on_cancel'])
_("Cannot connect to Moonraker")
+ f'\n\n{self._screen.apiclient.status}')
return False return False
return self.connect() return self.connect()
@ -65,24 +60,15 @@ class KlippyWebsocket(threading.Thread):
return False return False
logging.debug("Attempting to connect") logging.debug("Attempting to connect")
self.reconnect_count += 1 self.reconnect_count += 1
try:
state = self._screen.apiclient.get_server_info()
if state is False:
if self.reconnect_count > 2:
self._screen.printer_initializing(
_("Cannot connect to Moonraker") + '\n\n'
+ _("Retrying") + f' #{self.reconnect_count}'
)
return True
token = self._screen.apiclient.get_oneshot_token()
except Exception as e:
logging.debug(f"Unable to get oneshot token {e}")
return True
self.ws_url = f"{self.ws_proto}://{self._url}/websocket?token={token}" self.ws_url = f"{self.ws_proto}://{self._url}/websocket?token={self.api_key}"
self.ws = websocket.WebSocketApp( self.ws = websocket.WebSocketApp(
self.ws_url, self.ws_url,
on_close=self.on_close, on_error=self.on_error, on_message=self.on_message, on_open=self.on_open on_close=self.on_close,
on_error=self.on_error,
on_message=self.on_message,
on_open=self.on_open,
header=self.header
) )
self._wst = threading.Thread(target=self.ws.run_forever, daemon=True) self._wst = threading.Thread(target=self.ws.run_forever, daemon=True)
try: try:
@ -139,7 +125,6 @@ class KlippyWebsocket(threading.Thread):
logging.info("Moonraker Websocket Open") logging.info("Moonraker Websocket Open")
self.connected = True self.connected = True
self.connecting = False self.connecting = False
self._screen.reinit_count = 0
self.reconnect_count = 0 self.reconnect_count = 0
if "on_connect" in self._callback: if "on_connect" in self._callback:
GLib.idle_add(self._callback['on_connect'], priority=GLib.PRIORITY_HIGH_IDLE) GLib.idle_add(self._callback['on_connect'], priority=GLib.PRIORITY_HIGH_IDLE)
@ -160,9 +145,7 @@ class KlippyWebsocket(threading.Thread):
self.closing = False self.closing = False
return return
if "on_close" in self._callback: if "on_close" in self._callback:
GLib.idle_add(self._callback['on_close'], GLib.idle_add(self._callback['on_close'], priority=GLib.PRIORITY_HIGH_IDLE)
_("Lost Connection to Moonraker"),
priority=GLib.PRIORITY_HIGH_IDLE)
logging.info("Moonraker Websocket Closed") logging.info("Moonraker Websocket Closed")
self.connected = False self.connected = False
@ -228,6 +211,7 @@ class MoonrakerApi:
def object_subscription(self, updates): def object_subscription(self, updates):
logging.debug("Sending printer.objects.subscribe") logging.debug("Sending printer.objects.subscribe")
logging.debug(updates)
return self._ws.send_method( return self._ws.send_method(
"printer.objects.subscribe", "printer.objects.subscribe",
updates updates

View File

@ -112,7 +112,7 @@ class Panel(ScreenPanel):
data_misc = self._screen.apiclient.send_request( data_misc = self._screen.apiclient.send_request(
"server/database/item?namespace=mainsail&key=miscellaneous.entries") "server/database/item?namespace=mainsail&key=miscellaneous.entries")
if data_misc: if data_misc:
presets_data = data_misc['result']['value'][next(iter(data_misc["result"]["value"]))]['presets'] presets_data = data_misc['value'][next(iter(data_misc["value"]))]['presets']
if presets_data: if presets_data:
self.presets.update(self.parse_presets(presets_data)) self.presets.update(self.parse_presets(presets_data))
for i, key in enumerate(self.presets): for i, key in enumerate(self.presets):

View File

@ -38,4 +38,4 @@ class Panel(ScreenPanel):
self._screen.base_panel.action_bar.hide() self._screen.base_panel.action_bar.hide()
GLib.timeout_add(100, self._screen.base_panel.action_bar.hide) GLib.timeout_add(100, self._screen.base_panel.action_bar.hide)
if self._screen._ws: if self._screen._ws:
self._screen._ws.connecting = False self._screen.close_websocket()

View File

@ -102,10 +102,7 @@ class Panel(ScreenPanel):
self._screen._ws.klippy.restart() self._screen._ws.klippy.restart()
def retry(self, widget): def retry(self, widget):
if self._screen._ws and not self._screen._ws.connecting: self._screen.connect_printer(self._screen.connecting_to_printer)
self._screen._ws.retry()
self._screen.reinit_count = 0
self._screen._init_printer(_("Connecting to %s") % self._screen.connecting_to_printer)
self.show_restart_buttons() self.show_restart_buttons()
def reboot_poweroff(self, widget, method): def reboot_poweroff(self, widget, method):

View File

@ -413,5 +413,5 @@ class Panel(ScreenPanel):
if not result: if not result:
self._screen.show_popup_message(_("Error getting active spool")) self._screen.show_popup_message(_("Error getting active spool"))
return return
self._active_spool_id = result["result"]["spool_id"] self._active_spool_id = result["spool_id"]
return self._active_spool_id return self._active_spool_id

View File

@ -49,7 +49,7 @@ class Panel(ScreenPanel):
self.labels[f"{prog}_status"].connect("clicked", self.show_update_info, prog) self.labels[f"{prog}_status"].connect("clicked", self.show_update_info, prog)
try: try:
if prog in self.system_info['result']['system_info']['available_services']: if prog in self.system_info['system_info']['available_services']:
self.labels[f"{prog}_restart"] = self._gtk.Button("refresh", _("Restart"), self.labels[f"{prog}_restart"] = self._gtk.Button("refresh", _("Restart"),
"color2", "color2",
position=Gtk.PositionType.LEFT, position=Gtk.PositionType.LEFT,

158
screen.py
View File

@ -51,7 +51,6 @@ def set_text_direction(lang=None):
class KlipperScreen(Gtk.Window): class KlipperScreen(Gtk.Window):
""" Class for creating a screen for Klipper via HDMI """
_cur_panels = [] _cur_panels = []
connecting = False connecting = False
connecting_to_printer = None connecting_to_printer = None
@ -75,6 +74,7 @@ class KlipperScreen(Gtk.Window):
prompt = None prompt = None
def __init__(self, args): def __init__(self, args):
self.server_info = None
try: try:
super().__init__(title="KlipperScreen") super().__init__(title="KlipperScreen")
except Exception as e: except Exception as e:
@ -196,15 +196,18 @@ class KlipperScreen(Gtk.Window):
self.base_panel.show_printer_select(True) self.base_panel.show_printer_select(True)
self.show_printer_select() self.show_printer_select()
def close_websocket(self):
self._ws.close()
self.connected_printer = None
self.printer.state = "disconnected"
def connect_printer(self, name): def connect_printer(self, name):
self.connecting_to_printer = name self.connecting_to_printer = name
if self.files: if self.files:
self.files.__init__(self) self.files.__init__(self)
gc.collect()
if self._ws is not None and self._ws.connected: if self._ws is not None and self._ws.connected:
self._ws.close() self.close_websocket()
self.connected_printer = None gc.collect()
self.printer.state = "disconnected"
self.connecting = True self.connecting = True
self.initialized = False self.initialized = False
@ -223,21 +226,23 @@ class KlipperScreen(Gtk.Window):
self.printers[ind][name]["moonraker_port"], self.printers[ind][name]["moonraker_port"],
self.printers[ind][name]["moonraker_api_key"], self.printers[ind][name]["moonraker_api_key"],
) )
self._ws = KlippyWebsocket(
self.printer_initializing(_("Connecting to %s") % name, remove=True)
self._ws = KlippyWebsocket(self,
{ {
"on_connect": self.init_printer, "on_connect": self.websocket_connected,
"on_message": self._websocket_callback, "on_message": self._websocket_callback,
"on_close": self.websocket_disconnected "on_close": self.websocket_disconnected,
"on_cancel": self.websocket_connection_cancel,
}, },
self.printers[ind][name]["moonraker_host"], self.printers[ind][name]["moonraker_host"],
self.printers[ind][name]["moonraker_port"], self.printers[ind][name]["moonraker_port"],
self.printers[ind][name]["moonraker_api_key"],
) )
if self.files is None: if self.files is None:
self.files = KlippyFiles(self) self.files = KlippyFiles(self)
self._ws.initial_connect()
self.reinit_count = 0
self.printer_initializing(_("Connecting to %s") % name, True)
self.connect_to_moonraker()
def ws_subscribe(self): def ws_subscribe(self):
requested_updates = { requested_updates = {
@ -652,9 +657,24 @@ class KlipperScreen(Gtk.Window):
self.base_panel.show_heaters(False) self.base_panel.show_heaters(False)
self.show_panel("printer_select", _("Printer Select"), remove_all=True) self.show_panel("printer_select", _("Printer Select"), remove_all=True)
def websocket_disconnected(self, msg): def websocket_connection_cancel(self):
self.printer_initializing(
_("Cannot connect to Moonraker") + '\n\n'
+ f'{self.apiclient.status}'
)
def websocket_connected(self):
logging.debug("### websocket_connected")
self.reinit_count = 0
self.connecting = False
self.connected_printer = self.connecting_to_printer
self.base_panel.set_ks_printer_cfg(self.connected_printer)
self.init_moonraker_components()
self.init_klipper()
def websocket_disconnected(self):
logging.debug("### websocket_disconnected") logging.debug("### websocket_disconnected")
self.printer_initializing(msg, remove=True) self.printer_initializing(_("Lost Connection to Moonraker"), go_to_splash=True)
self.printer.state = "disconnected" self.printer.state = "disconnected"
self.connecting = True self.connecting = True
self.connected_printer = None self.connected_printer = None
@ -666,7 +686,7 @@ class KlipperScreen(Gtk.Window):
self.printer.stop_tempstore_updates() self.printer.stop_tempstore_updates()
self.initialized = False self.initialized = False
self.reinit_count = 0 self.reinit_count = 0
self._init_printer(_("Klipper has disconnected"), remove=True) self._init_printer(_("Klipper has disconnected"), go_to_splash=True)
def state_error(self): def state_error(self):
msg = _("Klipper has encountered an error.") + "\n" msg = _("Klipper has encountered an error.") + "\n"
@ -675,7 +695,7 @@ class KlipperScreen(Gtk.Window):
msg += _("A FIRMWARE_RESTART may fix the issue.") + "\n" msg += _("A FIRMWARE_RESTART may fix the issue.") + "\n"
elif "micro-controller" in state: elif "micro-controller" in state:
msg += _("Please recompile and flash the micro-controller.") + "\n" msg += _("Please recompile and flash the micro-controller.") + "\n"
self.printer_initializing(msg + "\n" + state, remove=True) self.printer_initializing(msg + "\n" + state, go_to_splash=True)
def state_paused(self): def state_paused(self):
self.state_printing() self.state_printing()
@ -705,7 +725,7 @@ class KlipperScreen(Gtk.Window):
self.printer.stop_tempstore_updates() self.printer.stop_tempstore_updates()
msg = self.printer.get_stat("webhooks", "state_message") msg = self.printer.get_stat("webhooks", "state_message")
msg = msg if "ready" not in msg else "" msg = msg if "ready" not in msg else ""
self.printer_initializing(_("Klipper has shutdown") + "\n\n" + msg, remove=True) self.printer_initializing(_("Klipper has shutdown") + "\n\n" + msg, go_to_splash=True)
def toggle_shortcut(self, show): def toggle_shortcut(self, show):
if show and not self.printer.get_printer_status_data()["printer"]["gcode_macros"]["count"] > 0: if show and not self.printer.get_printer_status_data()["printer"]["gcode_macros"]["count"] > 0:
@ -736,6 +756,7 @@ class KlipperScreen(Gtk.Window):
def _websocket_callback(self, action, data): def _websocket_callback(self, action, data):
if self.connecting: if self.connecting:
logging.debug("Not connected")
return return
if action == "notify_klippy_disconnected": if action == "notify_klippy_disconnected":
self.printer.process_update({'webhooks': {'state': "disconnected"}}) self.printer.process_update({'webhooks': {'state': "disconnected"}})
@ -746,7 +767,7 @@ class KlipperScreen(Gtk.Window):
elif action == "notify_klippy_ready": elif action == "notify_klippy_ready":
if not self.initialized: if not self.initialized:
self.reinit_count = 0 self.reinit_count = 0
self._init_printer("Reconnecting", klipper=True) self.init_klipper()
return return
self.printer.process_update({'webhooks': {'state': "ready"}}) self.printer.process_update({'webhooks': {'state': "ready"}})
return return
@ -846,8 +867,8 @@ class KlipperScreen(Gtk.Window):
if isinstance(x, Gtk.Button): if isinstance(x, Gtk.Button):
GLib.timeout_add(150, self.gtk.Button_busy, x, False) GLib.timeout_add(150, self.gtk.Button_busy, x, False)
def printer_initializing(self, msg, remove=False): def printer_initializing(self, msg, go_to_splash=False):
if 'splash_screen' not in self.panels or remove: if 'splash_screen' not in self.panels or go_to_splash:
self.show_panel("splash_screen", None, remove_all=True) self.show_panel("splash_screen", None, remove_all=True)
self.panels['splash_screen'].update_text(msg) self.panels['splash_screen'].update_text(msg)
self.log_notification(msg, 0) self.log_notification(msg, 0)
@ -871,95 +892,92 @@ class KlipperScreen(Gtk.Window):
else: else:
self._ws.klippy.power_device_off(dev) self._ws.klippy.power_device_off(dev)
def _init_printer(self, msg, remove=False, klipper=False): def _init_printer(self, msg, go_to_splash=False):
self.printer_initializing(msg, remove) self.printer_initializing(msg, go_to_splash)
self.initializing = False self.initializing = False
if klipper: if self._ws.connected:
GLib.timeout_add_seconds(3, self.init_klipper) GLib.timeout_add_seconds(4, self.init_klipper)
else: else:
GLib.timeout_add_seconds(3, self.init_printer) GLib.timeout_add_seconds(4, self.connect_to_moonraker)
def init_printer(self): def connect_to_moonraker(self):
if self.initializing: if self.initializing:
logging.info("Already Initializing") logging.info("Already Initializing")
return False return False
self.initializing = True self.initializing = True
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:
logging.info("Stopping Retries") logging.info("Stopping Retries")
self.printer_initializing(_("Cannot connect to Moonraker") + "\n\n"
+ f'{self.apiclient.status}')
self.initializing = False self.initializing = False
return False return False
state = self.apiclient.get_server_info() self.server_info = self.apiclient.get_server_info()
if state is False: if not self.server_info:
logging.info("Moonraker not connected") logging.info("Moonraker not connected")
self._init_printer(_("Cannot connect to Moonraker") + "\n\n"
+ _("Retrying") + f" #{self.reinit_count}")
self.initializing = False self.initializing = False
self.reinit_count += 1
return False
self._ws.initial_connect()
return False return False
self.connecting = not self._ws.connected
self.connected_printer = self.connecting_to_printer
self.base_panel.set_ks_printer_cfg(self.connected_printer)
self.init_server(state["result"]) def init_moonraker_components(self):
# Moonraker is ready, set a loop to init the printer
return self.init_klipper(state["result"])
def init_server(self, server_info):
popup = '' popup = ''
level = 2 level = 2
if server_info["warnings"]: if self.server_info["warnings"]:
popup += '\nMoonraker warnings:\n' popup += '\nMoonraker warnings:\n'
for warning in server_info["warnings"]: for warning in self.server_info["warnings"]:
warning = warning.replace('<br>', '').replace('<br/>', '\n').replace('</br>', '\n').replace(':', ':\n') warning = warning.replace('<br>', '').replace('<br/>', '\n').replace('</br>', '\n').replace(':', ':\n')
popup += f"{warning}\n" popup += f"{warning}\n"
if server_info["failed_components"]: if self.server_info["failed_components"]:
popup += '\nMoonraker failed components:\n' popup += '\nMoonraker failed components:\n'
for failed in server_info["failed_components"]: for failed in self.server_info["failed_components"]:
popup += f'[{failed}]\n' popup += f'[{failed}]\n'
if server_info["missing_klippy_requirements"]: if self.server_info["missing_klippy_requirements"]:
popup += '\nMissing Klipper configuration:\n' popup += '\nMissing Klipper configuration:\n'
for missing in server_info["missing_klippy_requirements"]: for missing in self.server_info["missing_klippy_requirements"]:
popup += f'[{missing}]\n' popup += f'[{missing}]\n'
level = 3 level = 3
if popup: if popup:
self.show_popup_message(popup, level) self.show_popup_message(popup, level)
if "power" in server_info["components"]: if "power" in self.server_info["components"]:
powerdevs = self.apiclient.send_request("machine/device_power/devices") powerdevs = self.apiclient.send_request("machine/device_power/devices")
if powerdevs is not False: if powerdevs is not False:
self.printer.configure_power_devices(powerdevs['result']) self.printer.configure_power_devices(powerdevs)
if "webcam" in server_info["components"]: if "webcam" in self.server_info["components"]:
cameras = self.apiclient.send_request("server/webcams/list") cameras = self.apiclient.send_request("server/webcams/list")
if cameras is not False: if cameras is not False:
self.printer.configure_cameras(cameras['result']['webcams']) self.printer.configure_cameras(cameras['webcams'])
if "spoolman" in server_info["components"]: if "spoolman" in self.server_info["components"]:
self.printer.enable_spoolman() self.printer.enable_spoolman()
def init_klipper(self, server_info=None): def init_klipper(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:
logging.info("Stopping Retries") logging.info("Stopping Retries")
return False return False
if not server_info:
server_info = self.apiclient.get_server_info()["result"]
logging.info(f"Moonraker info {server_info}")
self.reinit_count += 1 self.reinit_count += 1
self.server_info = self.apiclient.get_server_info()
if server_info['klippy_connected'] is False: logging.info(f"Moonraker info {self.server_info}")
logging.info("Klipper not connected") if self.server_info['klippy_connected'] is False:
msg = _("Moonraker: connected") + "\n\n" msg = _("Moonraker: connected") + "\n\n"
msg += f"Klipper: {server_info['klippy_state']}" + "\n\n" msg += f"Klipper: {self.server_info['klippy_state']}" + "\n\n"
if self.reinit_count <= self.max_retries: if self.reinit_count <= self.max_retries:
msg += _("Retrying") + f' #{self.reinit_count}' msg += _("Retrying") + f' #{self.reinit_count}'
return self._init_printer(msg, klipper=True) self.printer_initializing(msg)
GLib.timeout_add_seconds(3, self.init_klipper)
return False
printer_info = self.apiclient.get_printer_info() printer_info = self.apiclient.get_printer_info()
if printer_info is False: if printer_info is False:
return self._init_printer("Unable to get printer info from moonraker") self._init_printer("Unable to get printer info from moonraker")
return False
config = self.apiclient.send_request("printer/objects/query?configfile") config = self.apiclient.send_request("printer/objects/query?configfile")
if config is False: if config is False:
return self._init_printer("Error getting printer configuration") self._init_printer("Error getting printer configuration")
logging.debug(config['result']['status']) return False
# Reinitialize printer, in case the printer was shut down and anything has changed. self.printer.reinit(printer_info, config['status'])
self.printer.reinit(printer_info['result'], config['result']['status']) self.printer.available_commands = self.apiclient.get_gcode_help()
self.printer.available_commands = self.apiclient.get_gcode_help()['result']
self.ws_subscribe()
items = ( items = (
'bed_mesh', 'bed_mesh',
'configfile', 'configfile',
@ -990,7 +1008,9 @@ class KlipperScreen(Gtk.Window):
data = self.apiclient.send_request("printer/objects/query?" + "&".join(items)) data = self.apiclient.send_request("printer/objects/query?" + "&".join(items))
if data is False: if data is False:
return self._init_printer("Error getting printer object data") self._init_printer("Error getting printer object data")
return False
self.ws_subscribe()
self.files.set_gcodes_path() self.files.set_gcodes_path()
@ -998,7 +1018,7 @@ class KlipperScreen(Gtk.Window):
self.initialized = True self.initialized = True
self.reinit_count = 0 self.reinit_count = 0
self.initializing = False self.initializing = False
self.printer.process_update(data['result']['status']) self.printer.process_update(data['status'])
self.log_notification("Printer Initialized", 1) self.log_notification("Printer Initialized", 1)
return False return False
@ -1006,8 +1026,8 @@ class KlipperScreen(Gtk.Window):
if len(self.printer.get_temp_devices()) == 0: if len(self.printer.get_temp_devices()) == 0:
return return
tempstore = self.apiclient.send_request("server/temperature_store") tempstore = self.apiclient.send_request("server/temperature_store")
if tempstore and 'result' in tempstore and tempstore['result']: if tempstore:
self.printer.init_temp_store(tempstore['result']) self.printer.init_temp_store(tempstore)
if hasattr(self.panels[self._cur_panels[-1]], "update_graph_visibility"): if hasattr(self.panels[self._cur_panels[-1]], "update_graph_visibility"):
self.panels[self._cur_panels[-1]].update_graph_visibility() self.panels[self._cur_panels[-1]].update_graph_visibility()
else: else:
@ -1020,7 +1040,7 @@ class KlipperScreen(Gtk.Window):
server_config = self.apiclient.send_request("server/config") server_config = self.apiclient.send_request("server/config")
if server_config: if server_config:
try: try:
self.printer.tempstore_size = server_config["result"]["config"]["data_store"]["temperature_store_size"] self.printer.tempstore_size = server_config["config"]["data_store"]["temperature_store_size"]
logging.info(f"Temperature store size: {self.printer.tempstore_size}") logging.info(f"Temperature store size: {self.printer.tempstore_size}")
except KeyError: except KeyError:
logging.error("Couldn't get the temperature store size") logging.error("Couldn't get the temperature store size")