Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] console and notification pages are not rendered correctly on ubuntu server 23.10 with raspberry pi 4 #1273

Open
ss8688 opened this issue Feb 15, 2024 · 2 comments
Labels
bug Something isn't working wontfix This will not be worked on

Comments

@ss8688
Copy link

ss8688 commented Feb 15, 2024

What happened?

console and notification pages seem not rendered correctly.They look very strange.
image

image

image

What did you expect to happen instead?

words can see clearly

How to reproduce this bug?

runing klipperscreen on on ubuntu server 23.10 with raspberry pi 4

Additional information:

No response

Log output

body is too long (maximum is 65536 characters). So offer logs latter
@ss8688 ss8688 added the bug Something isn't working label Feb 15, 2024
@ss8688
Copy link
Author

ss8688 commented Feb 15, 2024

[main]
language = zh_CN

=======================
2024-02-15 10:54:37,119 [config.py:__init__()] - Configured printers: [
  {
    "Printer": {
      "moonraker_host": "127.0.0.1",
      "moonraker_port": "7125",
      "moonraker_api_key": ""
    }
  }
]
2024-02-15 10:54:37,189 [config.py:create_translations()] - Selected lang: zh_CN OS lang: zh_CN
2024-02-15 10:54:37,190 [config.py:install_language()] - Using lang zh_CN
2024-02-15 10:54:37,212 [screen.py:__init__()] - Screen resolution: 800x480
2024-02-15 10:54:37,213 [KlippyGtk.py:__init__()] - Font size: 16.6 (medium)
2024-02-15 10:54:37,578 [screen.py:set_screenblanking_timeout()] - Changing screen blanking to: 3600
2024-02-15 10:54:37,592 [screen.py:set_screenblanking_timeout()] - Using DPMS
2024-02-15 10:54:37,610 [screen.py:initial_connection()] - Default printer: None
2024-02-15 10:54:37,650 [screen.py:connect_printer()] - Connecting to printer: Printer
2024-02-15 10:54:37,651 [screen.py:_load_panel()] - Loading panel: splash_screen
2024-02-15 10:54:37,704 [screen.py:attach_panel()] - Current panel hierarchy: splash_screen
2024-02-15 10:54:37,713 [KlippyWebsocket.py:connect()] - Attempting to connect
2024-02-15 10:54:37,725 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/info
2024-02-15 10:54:37,734 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/access/oneshot_token
2024-02-15 10:54:37,736 [KlippyWebsocket.py:connect()] - Starting websocket thread
2024-02-15 10:54:37,744 [_logging.py:info()] - Websocket connected
2024-02-15 10:54:37,745 [KlippyWebsocket.py:on_open()] - Moonraker Websocket Open
2024-02-15 10:54:37,874 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/info
2024-02-15 10:54:37,882 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/webcams/list
2024-02-15 10:54:37,882 [printer.py:configure_cameras()] - Cameras: [{'name': 'camera0', 'enabled': True, 'icon': 'mdiWebcam', 'aspect_ratio': '16:9', 'target_fps': 30, 'target_fps_idle': 30, 'location': 'printer', 'service': 'mjpegstreamer-adaptive', 'stream_url': '/webcam/?action=stream', 'snapshot_url': '/webcam/?action=snapshot', 'flip_horizontal': False, 'flip_vertical': False, 'rotation': 0, 'source': 'config', 'extra_data': {}, 'uid': 'c3746231-7e67-5c0e-8f05-1e7bab1f89d2'}]
2024-02-15 10:54:37,883 [screen.py:init_klipper()] - Moonraker info {'klippy_connected': True, 'klippy_state': 'ready', 'components': ['secrets', 'template', 'klippy_connection', 'jsonrpc', 'internal_transport', 'application', 'websockets', 'dbus_manager', 'database', 'file_manager', 'authorization', 'klippy_apis', 'shell_command', 'machine', 'data_store', 'proc_stats', 'job_state', 'job_queue', 'http_client', 'announcements', 'webcam', 'extensions', 'octoprint_compat', 'history', 'update_manager'], 'failed_components': [], 'registered_directories': ['config', 'logs', 'gcodes', 'config_examples', 'docs'], 'warnings': [], 'websocket_count': 8, 'moonraker_version': 'v0.8.0-310-g67c98f6', 'missing_klippy_requirements': [], 'api_version': [1, 4, 0], 'api_version_string': '1.4.0'}
2024-02-15 10:54:37,895 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/info
2024-02-15 10:54:38,087 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/objects/query?configfile
2024-02-15 10:54:38,089 [screen.py:init_klipper()] - {'configfile': {'config': {'virtual_sdcard': {'path': '~/printer_data/gcodes', 'on_error_gcode': 'CANCEL_PRINT'}, 'pause_resume': {}, 'display_status': {}, 'respond': {}, 'gcode_macro CANCEL_PRINT': {'description': 'Cancel the actual running print', 'rename_existing': 'CANCEL_PRINT_BASE', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set allow_park = client.park_at_cancel|default(false)|lower == \'true\' %}\n{% set retract = client.cancel_retract|default(5.0)|abs %}\n\n{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)\nelse "X=" ~ client.park_at_cancel_x %}\n{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)\nelse "Y=" ~ client.park_at_cancel_y %}\n{% set custom_park = park_x|length > 0 or park_y|length > 0 %}\n\n\n{% if printer[\'gcode_macro RESUME\'].restore_idle_timeout > 0 %}\nSET_IDLE_TIMEOUT TIMEOUT={printer[\'gcode_macro RESUME\'].restore_idle_timeout}\n{% endif %}\n{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}\n_CLIENT_RETRACT LENGTH={retract}\nTURN_OFF_HEATERS\nM106 S0\n{client.user_cancel_macro|default("")}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False\n\nSET_PAUSE_NEXT_LAYER ENABLE=0\nSET_PAUSE_AT_LAYER ENABLE=0 LAYER=0\nCANCEL_PRINT_BASE'}, 'gcode_macro PAUSE': {'description': 'Pause the actual running print', 'rename_existing': 'PAUSE_BASE', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set idle_timeout = client.idle_timeout|default(0) %}\n{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != \'\' else 0 %}\n{% set restore = False if printer.toolhead.extruder == \'\'\nelse True  if params.RESTORE|default(1)|int == 1 else False %}\n\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{\'restore\': restore, \'temp\': temp}}"\n\n{% if idle_timeout > 0 %}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}\nSET_IDLE_TIMEOUT TIMEOUT={idle_timeout}\n{% endif %}\nPAUSE_BASE\n{client.user_pause_macro|default("")}\n_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}'}, 'gcode_macro RESUME': {'description': 'Resume the actual running print', 'rename_existing': 'RESUME_BASE', 'variable_last_extruder_temp': "{'restore': False, 'temp': 0}", 'variable_restore_idle_timeout': '0', 'variable_idle_state': 'False', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}\n{% set sp_move = client.speed_move|default(velocity) %}\n{% set runout_resume = True if client.runout_sensor|default("") == ""\nelse True if not printer[client.runout_sensor].enabled\nelse printer[client.runout_sensor].filament_detected %}\n{% set can_extrude = True if printer.toolhead.extruder == \'\'\nelse printer[printer.toolhead.extruder].can_extrude %}\n{% set do_resume = False %}\n{% set prompt_txt = [] %}\n\n\n{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False\n{% if last_extruder_temp.restore %}\n\nRESPOND TYPE=echo MSG=\'{"Restoring \\"%s\\" temperature to %3.1f\\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }\'\nM109 S{last_extruder_temp.temp}\n{% set do_resume = True %}\n{% elif can_extrude %}\n{% set do_resume = True %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}\'\n{% set _d = prompt_txt.append("\\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}\n{% endif %}\n\n{% elif can_extrude %}\n{% set do_resume = True %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}\'\n{% set _d = prompt_txt.append("\\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}\n{% endif %}\n{% if runout_resume %}\n{% if do_resume %}\n{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}\n{client.user_resume_macro|default("")}\n_CLIENT_EXTRUDE\nRESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}\n{% endif %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}\'\n{% set _d = prompt_txt.append("\\"%s\\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}\n{% endif %}\n\n{% if not (runout_resume and do_resume) %}\nRESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"\n{% for element in prompt_txt %}\nRESPOND TYPE=command MSG=\'{"action:prompt_text %s" % element}\'\n{% endfor %}\nRESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"\nRESPOND TYPE=command MSG="action:prompt_show"\n{% endif %}'}, 'gcode_macro SET_PAUSE_NEXT_LAYER': {'description': 'Enable a pause if the next layer is reached', 'gcode': '\n{% set pause_next_layer = printer[\'gcode_macro SET_PRINT_STATS_INFO\'].pause_next_layer %}\n{% set ENABLE = params.ENABLE|default(1)|int != 0 %}\n{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}\nSET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ \'enable\': ENABLE, \'call\': MACRO }}"'}, 'gcode_macro SET_PAUSE_AT_LAYER': {'description': 'Enable/disable a pause if a given layer number is reached', 'gcode': '\n{% set pause_at_layer = printer[\'gcode_macro SET_PRINT_STATS_INFO\'].pause_at_layer %}\n{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined\nelse params.LAYER is defined %}\n{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}\n{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}\nSET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ \'enable\': ENABLE, \'layer\': LAYER, \'call\': MACRO }}"'}, 'gcode_macro SET_PRINT_STATS_INFO': {'rename_existing': 'SET_PRINT_STATS_INFO_BASE', 'description': 'Overwrite, to get pause_next_layer and pause_at_layer feature', 'variable_pause_next_layer': '{ \'enable\': False, \'call\': "PAUSE" }', 'variable_pause_at_layer': '{ \'enable\': False, \'layer\': 0, \'call\': "PAUSE" }', 'gcode': '\n{% if pause_next_layer.enable %}\nRESPOND TYPE=echo MSG=\'{"%s, forced by pause_next_layer" % pause_next_layer.call}\'\n{pause_next_layer.call}\nSET_PAUSE_NEXT_LAYER ENABLE=0\n{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}\nRESPOND TYPE=echo MSG=\'{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}\'\n{pause_at_layer.call}\nSET_PAUSE_AT_LAYER ENABLE=0\n{% endif %}\nSET_PRINT_STATS_INFO_BASE {rawparams}'}, 'gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL': {'description': 'Helper: park toolhead used in PAUSE and CANCEL_PRINT', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}\n{% set use_custom     = client.use_custom_pos|default(false)|lower == \'true\' %}\n{% set custom_park_x  = client.custom_park_x|default(0.0) %}\n{% set custom_park_y  = client.custom_park_y|default(0.0) %}\n{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}\n{% set sp_hop         = client.speed_hop|default(15) * 60 %}\n{% set sp_move        = client.speed_move|default(velocity) * 60 %}\n\n{% set origin    = printer.gcode_move.homing_origin %}\n{% set act       = printer.gcode_move.gcode_position %}\n{% set max       = printer.toolhead.axis_maximum %}\n{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}\n{% set round_bed = True if printer.configfile.settings.printer.kinematics is in [\'delta\',\'polar\',\'rotary_delta\',\'winch\']\nelse False %}\n\n{% set z_min = params.Z_MIN|default(0)|float %}\n{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}\n{% set x_park = params.X       if params.X is defined\nelse custom_park_x  if use_custom\nelse 0.0            if round_bed\nelse (max.x - 5.0) %}\n{% set y_park = params.Y       if params.Y is defined\nelse custom_park_y  if use_custom\nelse (max.y - 5.0)  if round_bed and z_park < cone\nelse 0.0            if round_bed\nelse (max.y - 5.0) %}\n\n_CLIENT_RETRACT\n{% if "xyz" in printer.toolhead.homed_axes %}\nG90\nG1 Z{z_park} F{sp_hop}\nG1 X{x_park} Y{y_park} F{sp_move}\n{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}\n{% else %}\nRESPOND TYPE=echo MSG=\'Printer not homed\'\n{% endif %}'}, 'gcode_macro _CLIENT_EXTRUDE': {'description': 'Extrudes, if the extruder is hot enough', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == \'true\') and (printer.firmware_retraction is defined) %}\n{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}\n{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}\n{% set absolute_extrude = printer.gcode_move.absolute_extrude %}\n\n{% if printer.toolhead.extruder != \'\' %}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if use_fw_retract %}\n{% if length < 0 %}\nG10\n{% else %}\nG11\n{% endif %}\n{% else %}\nM83\nG1 E{length} F{(speed|float|abs) * 60}\n{% if absolute_extrude %}\nM82\n{% endif %}\n{% endif %}\n{% else %}\nRESPOND TYPE=echo MSG=\'{"\\"%s\\" not hot enough" % printer.toolhead.extruder}\'\n{% endif %}\n{% endif %}'}, 'gcode_macro _CLIENT_RETRACT': {'description': 'Retracts, if the extruder is hot enough', 'gcode': "\n{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}\n{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}\n{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}\n\n_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}"}, 'neopixel sb_leds': {'pin': 'PC5', 'chain_count': '3', 'color_order': 'GRBW', 'initial_red': '1.0', 'initial_green': '0.0', 'initial_blue': '1.0', 'initial_white': '0.0'}, 'gcode_macro _sb_vars': {'variable_colors': "{\n'logo': {\n'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'cleaning': {'r': 0.0, 'g': 0.02, 'b': 0.5, 'w': 0.0},\n'calibrating_z': {'r': 0.8, 'g': 0., 'b': 0.35, 'w': 0.0},\n'heating': {'r': 0.3, 'g': 0.18, 'b': 0.0, 'w': 0.0},\n'homing': {'r': 0.0, 'g': 0.6, 'b': 0.2, 'w': 0.0},\n'leveling': {'r': 0.5, 'g': 0.1, 'b': 0.4, 'w': 0.0},\n'meshing': {'r': 0.2, 'g': 1.0, 'b': 0.0, 'w': 0.0},\n'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'printing': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'standby': {'r': 0.01, 'g': 0.01, 'b': 0.01, 'w': 0.1},\n},\n'nozzle': {\n'heating': {'r': 0.8, 'g': 0.35, 'b': 0.0, 'w':0.0},\n'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'on': {'r': 0.8, 'g': 0.8, 'b': 0.8, 'w':1.0},\n'standby': {'r': 0.6, 'g': 0.0, 'b': 0.0, 'w':0.0},\n},\n'thermal': {\n'hot': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'cold': {'r': 0.3, 'g': 0.0, 'b': 0.3, 'w': 0.0}\n}\n}", 'variable_logo_led_name': '"sb_leds"', 'variable_logo_idx': '"1"', 'variable_nozzle_led_name': '"sb_leds"', 'variable_nozzle_idx': '"2,3"', 'gcode': ''}, 'gcode_macro _set_sb_leds': {'gcode': "\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = params.LED|string %}\n{% set idx = (params.IDX|string).split(',') %}\n{% set transmit_last = params.TRANSMIT|default(1) %}\n\n{% for led_index in idx %}\n{% set transmit=transmit_last if loop.last else 0 %}\nset_led led={led} red={red} green={green} blue={blue} white={white} index={led_index} transmit={transmit}\n{% endfor %}"}, 'gcode_macro _set_sb_leds_by_name': {'gcode': '\n{% set leds_name = params.LEDS %}\n{% set color_name = params.COLOR %}\n{% set color = printer["gcode_macro _sb_vars"].colors[leds_name][color_name] %}\n{% set led = printer["gcode_macro _sb_vars"][leds_name + "_led_name"] %}\n{% set idx = printer["gcode_macro _sb_vars"][leds_name + "_idx"] %}\n{% set transmit = params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={color.r} green={color.g} blue={color.b} white={color.w} idx="{idx}" transmit={transmit}'}, 'gcode_macro _set_logo_leds': {'gcode': '\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = printer["gcode_macro _sb_vars"].logo_led_name %}\n{% set idx = printer["gcode_macro _sb_vars"].logo_idx %}\n{% set transmit=params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}'}, 'gcode_macro _set_nozzle_leds': {'gcode': '\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = printer["gcode_macro _sb_vars"].nozzle_led_name %}\n{% set idx = printer["gcode_macro _sb_vars"].nozzle_idx %}\n{% set transmit=params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}'}, 'gcode_macro set_logo_leds_off': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_logo_leds red=0 blue=0 green=0 white=0 transmit={transmit}'}, 'gcode_macro set_nozzle_leds_on': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_sb_leds_by_name leds="nozzle" color="on" transmit={transmit}'}, 'gcode_macro set_nozzle_leds_off': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_sb_leds_by_name leds="nozzle" color="off" transmit={transmit}'}, 'gcode_macro status_off': {'gcode': '\nset_logo_leds_off transmit=0\nset_nozzle_leds_off'}, 'gcode_macro status_ready': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="standby" transmit=0\n_set_sb_leds_by_name leds="nozzle" color="standby" transmit=1'}, 'gcode_macro status_busy': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="busy" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_heating': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="heating" transmit=0\n_set_sb_leds_by_name leds="nozzle" color="heating" transmit=1'}, 'gcode_macro status_leveling': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="leveling" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_homing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="homing" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_cleaning': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="cleaning" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_meshing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="meshing" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_calibrating_z': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="calibrating_z" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_printing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="printing" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro LOAD_FILAMENT': {'variable_load_distance': '50', 'variable_purge_distance': '25', 'gcode': "\n{% set speed = params.SPEED|default(300) %}\n{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity  * 60 %}\nSAVE_GCODE_STATE NAME=load_state\nG91\nG92 E0\nG1 E{load_distance} F{max_velocity}\nG1 E{purge_distance} F{speed}\nRESTORE_GCODE_STATE NAME=load_state"}, 'gcode_macro UNLOAD_FILAMENT': {'variable_unload_distance': '50', 'variable_purge_distance': '25', 'gcode': "\n{% set speed = params.SPEED|default(300) %}\n{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity  * 60 %}\nSAVE_GCODE_STATE NAME=unload_state\nG91\nG92 E0\nG1 E{purge_distance} F{speed}\nG1 E-{unload_distance} F{max_velocity}\nRESTORE_GCODE_STATE NAME=unload_state"}, 'mcu': {'serial': '/dev/serial/by-id/usb-Klipper_stm32f407xx_2D003B000551323438323933-if00', 'restart_method': 'command'}, 'printer': {'kinematics': 'corexy', 'max_velocity': '300', 'max_accel': '3000', 'max_z_velocity': '15', 'max_z_accel': '350', 'square_corner_velocity': '5.0'}, 'stepper_x': {'step_pin': 'PC14', 'dir_pin': '!PC13', 'enable_pin': '!PC15', 'rotation_distance': '40', 'microsteps': '256', 'full_steps_per_rotation': '200', 'endstop_pin': 'PA14', 'position_min': '0', 'position_endstop': '250', 'position_max': '250', 'homing_speed': '25', 'homing_retract_dist': '5', 'homing_positive_dir': 'true'}, 'tmc2209 stepper_x': {'uart_pin': 'PE6', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_y': {'step_pin': 'PE5', 'dir_pin': '!PE4', 'enable_pin': '!PC15', 'rotation_distance': '40', 'microsteps': '256', 'full_steps_per_rotation': '200', 'endstop_pin': 'PA15', 'position_min': '0', 'position_endstop': '250', 'position_max': '250', 'homing_speed': '25', 'homing_retract_dist': '5', 'homing_positive_dir': 'true'}, 'tmc2209 stepper_y': {'uart_pin': 'PE3', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_z': {'step_pin': 'PE1', 'dir_pin': 'PE0', 'enable_pin': '!PE2', 'rotation_distance': '40', 'gear_ratio': '80:16', 'microsteps': '256', 'endstop_pin': 'probe:z_virtual_endstop', 'position_max': '240', 'position_min': '-5', 'homing_speed': '8', 'second_homing_speed': '3', 'homing_retract_dist': '3'}, 'tmc2209 stepper_z': {'uart_pin': 'PB7', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_z1': {'step_pin': 'PB5', 'dir_pin': '!PB4', 'enable_pin': '!PB6', 'rotation_distance': '40', 'gear_ratio': '80:16', 'microsteps': '256'}, 'tmc2209 stepper_z1': {'uart_pin': 'PB3', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_z2': {'step_pin': 'PD6', 'dir_pin': 'PD5', 'enable_pin': '!PD7', 'rotation_distance': '40', 'gear_ratio': '80:16', 'microsteps': '256'}, 'tmc2209 stepper_z2': {'uart_pin': 'PD4', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_z3': {'step_pin': 'PD2', 'dir_pin': '!PD1', 'enable_pin': '!PD3', 'rotation_distance': '40', 'gear_ratio': '80:16', 'microsteps': '256'}, 'tmc2209 stepper_z3': {'uart_pin': 'PD0', 'interpolate': 'False', 'run_current': '0.87', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'extruder': {'step_pin': 'PD13', 'dir_pin': 'PD12', 'enable_pin': '!PD14', 'rotation_distance': '22.6789511', 'gear_ratio': '50:17', 'microsteps': '256', 'full_steps_per_rotation': '200', 'nozzle_diameter': '0.400', 'filament_diameter': '1.75', 'heater_pin': 'PB1', 'sensor_type': 'Generic 3950', 'sensor_pin': 'PC1', 'min_temp': '10', 'max_temp': '270', 'max_power': '1.0', 'min_extrude_temp': '170', 'pressure_advance': '0.04', 'pressure_advance_smooth_time': '0.040', 'control': 'pid', 'pid_kp': '18.026', 'pid_ki': '0.683', 'pid_kd': '118.969'}, 'tmc2209 extruder': {'uart_pin': 'PD11', 'interpolate': 'False', 'run_current': '0.5', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'heater_bed': {'heater_pin': 'PB10', 'sensor_type': 'Generic 3950', 'sensor_pin': 'PC0', 'max_power': '0.6', 'min_temp': '0', 'max_temp': '120', 'control': 'pid', 'pid_kp': '40.738', 'pid_ki': '1.181', 'pid_kd': '351.369'}, 'probe': {'pin': 'PB12', 'x_offset': '0', 'y_offset': '0', 'z_offset': '0', 'speed': '10.0', 'samples': '3', 'samples_result': 'median', 'sample_retract_dist': '3.0', 'samples_tolerance': '0.006', 'samples_tolerance_retries': '3', 'activate_gcode': "\n{% set PROBE_TEMP = 150 %}\n{% set MAX_TEMP = PROBE_TEMP + 5 %}\n{% set ACTUAL_TEMP = printer.extruder.temperature %}\n{% set TARGET_TEMP = printer.extruder.target %}\n\n{% if TARGET_TEMP > PROBE_TEMP %}\n{ action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) }\nM109 S{ PROBE_TEMP }\n{% else %}\n\n{% if ACTUAL_TEMP > MAX_TEMP %}\n{ action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) }\nTEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP }\n{% endif %}\n{% endif %}"}, 'heater_fan hotend_fan': {'pin': 'PA2', 'max_power': '1.0', 'kick_start_time': '0.5', 'heater': 'extruder', 'heater_temp': '50.0'}, 'fan': {'pin': 'PA1', 'kick_start_time': '0.5', 'off_below': '0.10'}, 'heater_fan controller_fan': {'pin': 'PB0', 'kick_start_time': '0.5', 'heater': 'heater_bed', 'heater_temp': '45.0'}, 'idle_timeout': {'timeout': '1800'}, 'safe_z_home': {'home_xy_position': '125,125', 'speed': '100', 'z_hop': '10'}, 'quad_gantry_level': {'gantry_corners': '\n-60,-10\n310, 320', 'points': '\n50,25\n50,175\n200,175\n200,25', 'speed': '100', 'horizontal_move_z': '10', 'retries': '5', 'retry_tolerance': '0.0075', 'max_adjust': '10'}, 'board_pins': {'aliases': '\n\nEXP1_10=<5V>, EXP1_9=<GND>,\nEXP1_8=PE7,   EXP1_7=PE15,\nEXP1_6=PD8,  EXP1_5=PD9,\nEXP1_4=PD10,   EXP1_3=PE11,\nEXP1_2=PE10,   EXP1_1=PB2,\n\n\nEXP2_10=<5V>, EXP2_9=<GND>,\nEXP2_8=<RST>, EXP2_7=PB11,\nEXP2_6=PA7,   EXP2_5=PE8,\nEXP2_4=PA4,   EXP2_3=PE9,\nEXP2_2=PA5,   EXP2_1=PA6'}, 'verify_heater extruder': {'max_error': '240', 'check_gain_time': '5000'}, 'gcode_macro PARK': {'gcode': '\n{% set th = printer.toolhead %}\nG0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y//2} Z30'}, 'gcode_macro G32': {'gcode': '\nSAVE_GCODE_STATE NAME=STATE_G32\nG90\nG28\nQUAD_GANTRY_LEVEL\nG28\nPARK\nRESTORE_GCODE_STATE NAME=STATE_G32'}, 'gcode_macro PRINT_START': {'gcode': '\nG32\nG90\nG1 Z20 F3000'}, 'gcode_macro PRINT_END': {'gcode': '\n\n{% set th = printer.toolhead %}\n{% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %}\n{% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %}\n{% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %}\n\nSAVE_GCODE_STATE NAME=STATE_PRINT_END\n\nM400\nG92 E0\nG1 E-5.0 F1800\n\nTURN_OFF_HEATERS\n\nG90\nG0 X{x_safe} Y{y_safe} Z{z_safe} F20000\nG0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600\nM107\n\nBED_MESH_CLEAR\n\n\n\n\n\n\nRESTORE_GCODE_STATE NAME=STATE_PRINT_END MOVE=0'}, 'input_shaper': {'shaper_type_x': 'mzv', 'shaper_freq_x': '43.0', 'shaper_type_y': 'mzv', 'shaper_freq_y': '43.2'}, 'gcode_macro _OBICO_LAYER_CHANGE': {'description': 'Run a scan across the current print area', 'variable_first_layer_scan_retract_length': '6', 'variable_first_layer_scan_retract_speed': '15', 'variable_first_layer_scan_unretract_length': '6.5', 'variable_first_layer_scan_unretract_speed': '15', 'variable_first_layer_scan_resume_speed': '50', 'variable_first_layer_scan_enabled': 'True', 'variable_first_layer_scan_stepover': '10', 'variable_first_layer_scan_speed': '10', 'variable_first_layer_scan_zhop': '4', 'variable_first_layer_scan_zhop_speed': '15', 'variable_verbose': 'False', 'variable_current_layer': '-1', 'variable_first_layer_scanning': 'False', 'variable_wait': '{\'resume\': "RESUME", \'absolute_coordinates\': True, \'absolute_extrude\': True, \'e\': 0.0}', 'gcode': '\n\n{% set pause_macro  = "PAUSE"  if printer.configfile.settings[\'gcode_macro pause\']  is not defined\nelse printer.configfile.settings[\'gcode_macro pause\'].rename_existing %}\n{% set resume_macro = "RESUME" if printer.configfile.settings[\'gcode_macro resume\'] is not defined\nelse printer.configfile.settings[\'gcode_macro resume\'].rename_existing %}\n\n{% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}\n{% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}\n\n{% set polygon_points = printer.exclude_object.objects|map(attribute=\'polygon\')|sum(start=[]) if printer.exclude_object is defined else [] %}\n{% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}\n{% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}\n{% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}\n{% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}\n\n{% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method=\'ceil\')|int %}\n\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Layer %d" % (current_layer)}\' {% endif %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}\n\n{% if first_layer_scan_enabled and current_layer == 2 %}\n\n{% set wait_dic = {\'resume\'              : resume_macro,\n\'absolute_coordinates\': printer.gcode_move.absolute_coordinates,\n\'absolute_extrude\'    : printer.gcode_move.absolute_extrude,\n\'e\'                   : printer.gcode_move.gcode_position.e} %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Prepair scanning" {% endif %}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}\' {% endif %}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}\' {% endif %}\nM83\nG0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}\n{% endif %}\nG91\nG0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Call %s" % pause_macro}\' {% endif %}\n{pause_macro}\n\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Start scanning" {% endif %}\n\nUPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True\nG90\nG0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}\n{% for ystep in range(stepoverCount) %}\nG0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}\nG0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}\n{% endfor %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Finish scanning" {% endif %}\n{% endif %}'}, 'delayed_gcode _WAIT_OBICO_LAYER_CHANGE': {'gcode': '\n{% set lc_macro = printer[\'gcode_macro _OBICO_LAYER_CHANGE\'] %}\n{% if lc_macro.first_layer_scanning %}\n\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Waiting for first layer scan..." {% endif %}\nUPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0\n{% else %}\n\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Resume print" {% endif %}\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}\' {% endif %}\n{lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}\nG91\nG0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}\' {% endif %}\nM83\nG0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}\n{% endif %}\n\n\n{% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}\n{% if lc_macro.wait.absolute_extrude %}\nM82\nG92 E{lc_macro.wait.e}\n{% endif %}\n{% endif %}'}}, 'settings': {'mcu': {'serial': '/dev/serial/by-id/usb-Klipper_stm32f407xx_2D003B000551323438323933-if00', 'baud': 250000, 'restart_method': 'command', 'max_stepper_error': 2.5e-05}, 'virtual_sdcard': {'path': '~/printer_data/gcodes', 'on_error_gcode': 'CANCEL_PRINT'}, 'pause_resume': {'recover_velocity': 50.0}, 'respond': {'default_type': 'echo', 'default_prefix': 'echo:'}, 'gcode_macro cancel_print': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set allow_park = client.park_at_cancel|default(false)|lower == \'true\' %}\n{% set retract = client.cancel_retract|default(5.0)|abs %}\n\n{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)\nelse "X=" ~ client.park_at_cancel_x %}\n{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)\nelse "Y=" ~ client.park_at_cancel_y %}\n{% set custom_park = park_x|length > 0 or park_y|length > 0 %}\n\n\n{% if printer[\'gcode_macro RESUME\'].restore_idle_timeout > 0 %}\nSET_IDLE_TIMEOUT TIMEOUT={printer[\'gcode_macro RESUME\'].restore_idle_timeout}\n{% endif %}\n{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}\n_CLIENT_RETRACT LENGTH={retract}\nTURN_OFF_HEATERS\nM106 S0\n{client.user_cancel_macro|default("")}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False\n\nSET_PAUSE_NEXT_LAYER ENABLE=0\nSET_PAUSE_AT_LAYER ENABLE=0 LAYER=0\nCANCEL_PRINT_BASE', 'rename_existing': 'CANCEL_PRINT_BASE', 'description': 'Cancel the actual running print'}, 'gcode_macro pause': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set idle_timeout = client.idle_timeout|default(0) %}\n{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != \'\' else 0 %}\n{% set restore = False if printer.toolhead.extruder == \'\'\nelse True  if params.RESTORE|default(1)|int == 1 else False %}\n\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{\'restore\': restore, \'temp\': temp}}"\n\n{% if idle_timeout > 0 %}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}\nSET_IDLE_TIMEOUT TIMEOUT={idle_timeout}\n{% endif %}\nPAUSE_BASE\n{client.user_pause_macro|default("")}\n_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}', 'rename_existing': 'PAUSE_BASE', 'description': 'Pause the actual running print'}, 'gcode_macro resume': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}\n{% set sp_move = client.speed_move|default(velocity) %}\n{% set runout_resume = True if client.runout_sensor|default("") == ""\nelse True if not printer[client.runout_sensor].enabled\nelse printer[client.runout_sensor].filament_detected %}\n{% set can_extrude = True if printer.toolhead.extruder == \'\'\nelse printer[printer.toolhead.extruder].can_extrude %}\n{% set do_resume = False %}\n{% set prompt_txt = [] %}\n\n\n{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False\n{% if last_extruder_temp.restore %}\n\nRESPOND TYPE=echo MSG=\'{"Restoring \\"%s\\" temperature to %3.1f\\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }\'\nM109 S{last_extruder_temp.temp}\n{% set do_resume = True %}\n{% elif can_extrude %}\n{% set do_resume = True %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}\'\n{% set _d = prompt_txt.append("\\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}\n{% endif %}\n\n{% elif can_extrude %}\n{% set do_resume = True %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}\'\n{% set _d = prompt_txt.append("\\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}\n{% endif %}\n{% if runout_resume %}\n{% if do_resume %}\n{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}\n{client.user_resume_macro|default("")}\n_CLIENT_EXTRUDE\nRESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}\n{% endif %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}\'\n{% set _d = prompt_txt.append("\\"%s\\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}\n{% endif %}\n\n{% if not (runout_resume and do_resume) %}\nRESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"\n{% for element in prompt_txt %}\nRESPOND TYPE=command MSG=\'{"action:prompt_text %s" % element}\'\n{% endfor %}\nRESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"\nRESPOND TYPE=command MSG="action:prompt_show"\n{% endif %}', 'rename_existing': 'RESUME_BASE', 'description': 'Resume the actual running print', 'variable_last_extruder_temp': "{'restore': False, 'temp': 0}", 'variable_restore_idle_timeout': '0', 'variable_idle_state': 'False'}, 'gcode_macro set_pause_next_layer': {'gcode': '\n{% set pause_next_layer = printer[\'gcode_macro SET_PRINT_STATS_INFO\'].pause_next_layer %}\n{% set ENABLE = params.ENABLE|default(1)|int != 0 %}\n{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}\nSET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ \'enable\': ENABLE, \'call\': MACRO }}"', 'description': 'Enable a pause if the next layer is reached'}, 'gcode_macro set_pause_at_layer': {'gcode': '\n{% set pause_at_layer = printer[\'gcode_macro SET_PRINT_STATS_INFO\'].pause_at_layer %}\n{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined\nelse params.LAYER is defined %}\n{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}\n{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}\nSET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ \'enable\': ENABLE, \'layer\': LAYER, \'call\': MACRO }}"', 'description': 'Enable/disable a pause if a given layer number is reached'}, 'gcode_macro set_print_stats_info': {'gcode': '\n{% if pause_next_layer.enable %}\nRESPOND TYPE=echo MSG=\'{"%s, forced by pause_next_layer" % pause_next_layer.call}\'\n{pause_next_layer.call}\nSET_PAUSE_NEXT_LAYER ENABLE=0\n{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}\nRESPOND TYPE=echo MSG=\'{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}\'\n{pause_at_layer.call}\nSET_PAUSE_AT_LAYER ENABLE=0\n{% endif %}\nSET_PRINT_STATS_INFO_BASE {rawparams}', 'rename_existing': 'SET_PRINT_STATS_INFO_BASE', 'description': 'Overwrite, to get pause_next_layer and pause_at_layer feature', 'variable_pause_next_layer': '{ \'enable\': False, \'call\': "PAUSE" }', 'variable_pause_at_layer': '{ \'enable\': False, \'layer\': 0, \'call\': "PAUSE" }'}, 'gcode_macro _toolhead_park_pause_cancel': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}\n{% set use_custom     = client.use_custom_pos|default(false)|lower == \'true\' %}\n{% set custom_park_x  = client.custom_park_x|default(0.0) %}\n{% set custom_park_y  = client.custom_park_y|default(0.0) %}\n{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}\n{% set sp_hop         = client.speed_hop|default(15) * 60 %}\n{% set sp_move        = client.speed_move|default(velocity) * 60 %}\n\n{% set origin    = printer.gcode_move.homing_origin %}\n{% set act       = printer.gcode_move.gcode_position %}\n{% set max       = printer.toolhead.axis_maximum %}\n{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}\n{% set round_bed = True if printer.configfile.settings.printer.kinematics is in [\'delta\',\'polar\',\'rotary_delta\',\'winch\']\nelse False %}\n\n{% set z_min = params.Z_MIN|default(0)|float %}\n{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}\n{% set x_park = params.X       if params.X is defined\nelse custom_park_x  if use_custom\nelse 0.0            if round_bed\nelse (max.x - 5.0) %}\n{% set y_park = params.Y       if params.Y is defined\nelse custom_park_y  if use_custom\nelse (max.y - 5.0)  if round_bed and z_park < cone\nelse 0.0            if round_bed\nelse (max.y - 5.0) %}\n\n_CLIENT_RETRACT\n{% if "xyz" in printer.toolhead.homed_axes %}\nG90\nG1 Z{z_park} F{sp_hop}\nG1 X{x_park} Y{y_park} F{sp_move}\n{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}\n{% else %}\nRESPOND TYPE=echo MSG=\'Printer not homed\'\n{% endif %}', 'description': 'Helper: park toolhead used in PAUSE and CANCEL_PRINT'}, 'gcode_macro _client_extrude': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == \'true\') and (printer.firmware_retraction is defined) %}\n{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}\n{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}\n{% set absolute_extrude = printer.gcode_move.absolute_extrude %}\n\n{% if printer.toolhead.extruder != \'\' %}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if use_fw_retract %}\n{% if length < 0 %}\nG10\n{% else %}\nG11\n{% endif %}\n{% else %}\nM83\nG1 E{length} F{(speed|float|abs) * 60}\n{% if absolute_extrude %}\nM82\n{% endif %}\n{% endif %}\n{% else %}\nRESPOND TYPE=echo MSG=\'{"\\"%s\\" not hot enough" % printer.toolhead.extruder}\'\n{% endif %}\n{% endif %}', 'description': 'Extrudes, if the extruder is hot enough'}, 'gcode_macro _client_retract': {'gcode': "\n{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}\n{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}\n{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}\n\n_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}", 'description': 'Retracts, if the extruder is hot enough'}, 'neopixel sb_leds': {'pin': 'PC5', 'chain_count': 3, 'color_order': ['GRBW'], 'initial_red': 1.0, 'initial_green': 0.0, 'initial_blue': 1.0, 'initial_white': 0.0}, 'gcode_macro _sb_vars': {'gcode': '', 'description': 'G-Code macro', 'variable_colors': "{\n'logo': {\n'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'cleaning': {'r': 0.0, 'g': 0.02, 'b': 0.5, 'w': 0.0},\n'calibrating_z': {'r': 0.8, 'g': 0., 'b': 0.35, 'w': 0.0},\n'heating': {'r': 0.3, 'g': 0.18, 'b': 0.0, 'w': 0.0},\n'homing': {'r': 0.0, 'g': 0.6, 'b': 0.2, 'w': 0.0},\n'leveling': {'r': 0.5, 'g': 0.1, 'b': 0.4, 'w': 0.0},\n'meshing': {'r': 0.2, 'g': 1.0, 'b': 0.0, 'w': 0.0},\n'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'printing': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'standby': {'r': 0.01, 'g': 0.01, 'b': 0.01, 'w': 0.1},\n},\n'nozzle': {\n'heating': {'r': 0.8, 'g': 0.35, 'b': 0.0, 'w':0.0},\n'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'on': {'r': 0.8, 'g': 0.8, 'b': 0.8, 'w':1.0},\n'standby': {'r': 0.6, 'g': 0.0, 'b': 0.0, 'w':0.0},\n},\n'thermal': {\n'hot': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'cold': {'r': 0.3, 'g': 0.0, 'b': 0.3, 'w': 0.0}\n}\n}", 'variable_logo_led_name': '"sb_leds"', 'variable_logo_idx': '"1"', 'variable_nozzle_led_name': '"sb_leds"', 'variable_nozzle_idx': '"2,3"'}, 'gcode_macro _set_sb_leds': {'gcode': "\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = params.LED|string %}\n{% set idx = (params.IDX|string).split(',') %}\n{% set transmit_last = params.TRANSMIT|default(1) %}\n\n{% for led_index in idx %}\n{% set transmit=transmit_last if loop.last else 0 %}\nset_led led={led} red={red} green={green} blue={blue} white={white} index={led_index} transmit={transmit}\n{% endfor %}", 'description': 'G-Code macro'}, 'gcode_macro _set_sb_leds_by_name': {'gcode': '\n{% set leds_name = params.LEDS %}\n{% set color_name = params.COLOR %}\n{% set color = printer["gcode_macro _sb_vars"].colors[leds_name][color_name] %}\n{% set led = printer["gcode_macro _sb_vars"][leds_name + "_led_name"] %}\n{% set idx = printer["gcode_macro _sb_vars"][leds_name + "_idx"] %}\n{% set transmit = params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={color.r} green={color.g} blue={color.b} white={color.w} idx="{idx}" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro _set_logo_leds': {'gcode': '\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = printer["gcode_macro _sb_vars"].logo_led_name %}\n{% set idx = printer["gcode_macro _sb_vars"].logo_idx %}\n{% set transmit=params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro _set_nozzle_leds': {'gcode': '\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = printer["gcode_macro _sb_vars"].nozzle_led_name %}\n{% set idx = printer["gcode_macro _sb_vars"].nozzle_idx %}\n{% set transmit=params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro set_logo_leds_off': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_logo_leds red=0 blue=0 green=0 white=0 transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro set_nozzle_leds_on': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_sb_leds_by_name leds="nozzle" color="on" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro set_nozzle_leds_off': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_sb_leds_by_name leds="nozzle" color="off" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro status_off': {'gcode': '\nset_logo_leds_off transmit=0\nset_nozzle_leds_off', 'description': 'G-Code macro'}, 'gcode_macro status_ready': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="standby" transmit=0\n_set_sb_leds_by_name leds="nozzle" color="standby" transmit=1', 'description': 'G-Code macro'}, 'gcode_macro status_busy': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="busy" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_heating': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="heating" transmit=0\n_set_sb_leds_by_name leds="nozzle" color="heating" transmit=1', 'description': 'G-Code macro'}, 'gcode_macro status_leveling': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="leveling" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_homing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="homing" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_cleaning': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="cleaning" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_meshing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="meshing" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_calibrating_z': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="calibrating_z" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_printing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="printing" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro load_filament': {'gcode': "\n{% set speed = params.SPEED|default(300) %}\n{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity  * 60 %}\nSAVE_GCODE_STATE NAME=load_state\nG91\nG92 E0\nG1 E{load_distance} F{max_velocity}\nG1 E{purge_distance} F{speed}\nRESTORE_GCODE_STATE NAME=load_state", 'description': 'G-Code macro', 'variable_load_distance': '50', 'variable_purge_distance': '25'}, 'gcode_macro unload_filament': {'gcode': "\n{% set speed = params.SPEED|default(300) %}\n{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity  * 60 %}\nSAVE_GCODE_STATE NAME=unload_state\nG91\nG92 E0\nG1 E{purge_distance} F{speed}\nG1 E-{unload_distance} F{max_velocity}\nRESTORE_GCODE_STATE NAME=unload_state", 'description': 'G-Code macro', 'variable_unload_distance': '50', 'variable_purge_distance': '25'}, 'tmc2209 stepper_x': {'uart_pin': 'PE6', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_x': {'microsteps': 256, 'step_pin': 'PC14', 'dir_pin': '!PC13', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [], 'enable_pin': '!PC15', 'endstop_pin': 'PA14', 'position_endstop': 250.0, 'position_min': 0.0, 'position_max': 250.0, 'homing_speed': 25.0, 'second_homing_speed': 12.5, 'homing_retract_speed': 25.0, 'homing_retract_dist': 5.0, 'homing_positive_dir': True}, 'tmc2209 stepper_y': {'uart_pin': 'PE3', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_y': {'microsteps': 256, 'step_pin': 'PE5', 'dir_pin': '!PE4', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [], 'enable_pin': '!PC15', 'endstop_pin': 'PA15', 'position_endstop': 250.0, 'position_min': 0.0, 'position_max': 250.0, 'homing_speed': 25.0, 'second_homing_speed': 12.5, 'homing_retract_speed': 25.0, 'homing_retract_dist': 5.0, 'homing_positive_dir': True}, 'tmc2209 stepper_z': {'uart_pin': 'PB7', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_z': {'microsteps': 256, 'step_pin': 'PE1', 'dir_pin': 'PE0', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [[80.0, 16.0]], 'enable_pin': '!PE2', 'endstop_pin': 'probe:z_virtual_endstop', 'position_min': -5.0, 'position_max': 240.0, 'homing_speed': 8.0, 'second_homing_speed': 3.0, 'homing_retract_speed': 8.0, 'homing_retract_dist': 3.0, 'homing_positive_dir': False}, 'tmc2209 stepper_z1': {'uart_pin': 'PB3', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_z1': {'microsteps': 256, 'step_pin': 'PB5', 'dir_pin': '!PB4', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [[80.0, 16.0]], 'enable_pin': '!PB6'}, 'tmc2209 stepper_z2': {'uart_pin': 'PD4', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_z2': {'microsteps': 256, 'step_pin': 'PD6', 'dir_pin': 'PD5', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [[80.0, 16.0]], 'enable_pin': '!PD7'}, 'tmc2209 stepper_z3': {'uart_pin': 'PD0', 'uart_address': 0, 'run_current': 0.87, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_z3': {'microsteps': 256, 'step_pin': 'PD2', 'dir_pin': '!PD1', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [[80.0, 16.0]], 'enable_pin': '!PD3'}, 'tmc2209 extruder': {'uart_pin': 'PD11', 'uart_address': 0, 'run_current': 0.5, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'extruder': {'microsteps': 256, 'sensor_type': 'Generic 3950', 'pullup_resistor': 4700.0, 'inline_resistor': 0.0, 'sensor_pin': 'PC1', 'min_temp': 10.0, 'max_temp': 270.0, 'min_extrude_temp': 170.0, 'max_power': 1.0, 'smooth_time': 1.0, 'control': 'pid', 'pid_kp': 18.026, 'pid_ki': 0.683, 'pid_kd': 118.969, 'heater_pin': 'PB1', 'pwm_cycle_time': 0.1, 'nozzle_diameter': 0.4, 'filament_diameter': 1.75, 'max_extrude_cross_section': 0.6400000000000001, 'max_extrude_only_velocity': 79.82432411074329, 'max_extrude_only_accel': 798.2432411074329, 'max_extrude_only_distance': 50.0, 'instantaneous_corner_velocity': 1.0, 'step_pin': 'PD13', 'pressure_advance': 0.04, 'pressure_advance_smooth_time': 0.04, 'dir_pin': 'PD12', 'rotation_distance': 22.6789511, 'full_steps_per_rotation': 200, 'gear_ratio': [[50.0, 17.0]], 'enable_pin': '!PD14'}, 'heater_bed': {'sensor_type': 'Generic 3950', 'pullup_resistor': 4700.0, 'inline_resistor': 0.0, 'sensor_pin': 'PC0', 'min_temp': 0.0, 'max_temp': 120.0, 'min_extrude_temp': 170.0, 'max_power': 0.6, 'smooth_time': 1.0, 'control': 'pid', 'pid_kp': 40.738, 'pid_ki': 1.181, 'pid_kd': 351.369, 'heater_pin': 'PB10', 'pwm_cycle_time': 0.1}, 'verify_heater heater_bed': {'hysteresis': 5.0, 'max_error': 120.0, 'heating_gain': 2.0, 'check_gain_time': 60.0}, 'probe': {'z_offset': 0.0, 'deactivate_on_each_sample': True, 'activate_gcode': "\n{% set PROBE_TEMP = 150 %}\n{% set MAX_TEMP = PROBE_TEMP + 5 %}\n{% set ACTUAL_TEMP = printer.extruder.temperature %}\n{% set TARGET_TEMP = printer.extruder.target %}\n\n{% if TARGET_TEMP > PROBE_TEMP %}\n{ action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) }\nM109 S{ PROBE_TEMP }\n{% else %}\n\n{% if ACTUAL_TEMP > MAX_TEMP %}\n{ action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) }\nTEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP }\n{% endif %}\n{% endif %}", 'deactivate_gcode': '', 'pin': 'PB12', 'speed': 10.0, 'lift_speed': 10.0, 'x_offset': 0.0, 'y_offset': 0.0, 'samples': 3, 'sample_retract_dist': 3.0, 'samples_result': 'median', 'samples_tolerance': 0.006, 'samples_tolerance_retries': 3}, 'heater_fan hotend_fan': {'heater': ['extruder'], 'heater_temp': 50.0, 'max_power': 1.0, 'kick_start_time': 0.5, 'off_below': 0.0, 'cycle_time': 0.01, 'hardware_pwm': False, 'shutdown_speed': 1.0, 'pin': 'PA2', 'fan_speed': 1.0}, 'fan': {'max_power': 1.0, 'kick_start_time': 0.5, 'off_below': 0.1, 'cycle_time': 0.01, 'hardware_pwm': False, 'shutdown_speed': 0.0, 'pin': 'PA1'}, 'heater_fan controller_fan': {'heater': ['heater_bed'], 'heater_temp': 45.0, 'max_power': 1.0, 'kick_start_time': 0.5, 'off_below': 0.0, 'cycle_time': 0.01, 'hardware_pwm': False, 'shutdown_speed': 1.0, 'pin': 'PB0', 'fan_speed': 1.0}, 'idle_timeout': {'timeout': 1800.0, 'gcode': "\n{% if 'heaters' in printer %}\n   TURN_OFF_HEATERS\n{% endif %}\nM84\n"}, 'safe_z_home': {'home_xy_position': [125.0, 125.0], 'z_hop': 10.0, 'z_hop_speed': 15.0, 'speed': 100.0, 'move_to_previous': False}, 'quad_gantry_level': {'retries': 5, 'retry_tolerance': 0.0075, 'max_adjust': 10.0, 'horizontal_move_z': 10.0, 'points': [[50.0, 25.0], [50.0, 175.0], [200.0, 175.0], [200.0, 25.0]], 'speed': 100.0, 'gantry_corners': [[-60.0, -10.0], [310.0, 320.0]]}, 'board_pins': {'mcu': ['mcu'], 'aliases': [['EXP1_10', '<5V>'], ['EXP1_9', '<GND>'], ['EXP1_8', 'PE7'], ['EXP1_7', 'PE15'], ['EXP1_6', 'PD8'], ['EXP1_5', 'PD9'], ['EXP1_4', 'PD10'], ['EXP1_3', 'PE11'], ['EXP1_2', 'PE10'], ['EXP1_1', 'PB2'], ['EXP2_10', '<5V>'], ['EXP2_9', '<GND>'], ['EXP2_8', '<RST>'], ['EXP2_7', 'PB11'], ['EXP2_6', 'PA7'], ['EXP2_5', 'PE8'], ['EXP2_4', 'PA4'], ['EXP2_3', 'PE9'], ['EXP2_2', 'PA5'], ['EXP2_1', 'PA6']]}, 'verify_heater extruder': {'hysteresis': 5.0, 'max_error': 240.0, 'heating_gain': 2.0, 'check_gain_time': 5000.0}, 'gcode_macro park': {'gcode': '\n{% set th = printer.toolhead %}\nG0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y//2} Z30', 'description': 'G-Code macro'}, 'gcode_macro g32': {'gcode': '\nSAVE_GCODE_STATE NAME=STATE_G32\nG90\nG28\nQUAD_GANTRY_LEVEL\nG28\nPARK\nRESTORE_GCODE_STATE NAME=STATE_G32', 'description': 'G-Code macro'}, 'gcode_macro print_start': {'gcode': '\nG32\nG90\nG1 Z20 F3000', 'description': 'G-Code macro'}, 'gcode_macro print_end': {'gcode': '\n\n{% set th = printer.toolhead %}\n{% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %}\n{% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %}\n{% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %}\n\nSAVE_GCODE_STATE NAME=STATE_PRINT_END\n\nM400\nG92 E0\nG1 E-5.0 F1800\n\nTURN_OFF_HEATERS\n\nG90\nG0 X{x_safe} Y{y_safe} Z{z_safe} F20000\nG0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600\nM107\n\nBED_MESH_CLEAR\n\n\n\n\n\n\nRESTORE_GCODE_STATE NAME=STATE_PRINT_END MOVE=0', 'description': 'G-Code macro'}, 'input_shaper': {'shaper_type': 'mzv', 'shaper_type_x': 'mzv', 'damping_ratio_x': 0.1, 'shaper_freq_x': 43.0, 'shaper_type_y': 'mzv', 'damping_ratio_y': 0.1, 'shaper_freq_y': 43.2}, 'gcode_macro _obico_layer_change': {'gcode': '\n\n{% set pause_macro  = "PAUSE"  if printer.configfile.settings[\'gcode_macro pause\']  is not defined\nelse printer.configfile.settings[\'gcode_macro pause\'].rename_existing %}\n{% set resume_macro = "RESUME" if printer.configfile.settings[\'gcode_macro resume\'] is not defined\nelse printer.configfile.settings[\'gcode_macro resume\'].rename_existing %}\n\n{% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}\n{% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}\n\n{% set polygon_points = printer.exclude_object.objects|map(attribute=\'polygon\')|sum(start=[]) if printer.exclude_object is defined else [] %}\n{% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}\n{% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}\n{% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}\n{% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}\n\n{% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method=\'ceil\')|int %}\n\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Layer %d" % (current_layer)}\' {% endif %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}\n\n{% if first_layer_scan_enabled and current_layer == 2 %}\n\n{% set wait_dic = {\'resume\'              : resume_macro,\n\'absolute_coordinates\': printer.gcode_move.absolute_coordinates,\n\'absolute_extrude\'    : printer.gcode_move.absolute_extrude,\n\'e\'                   : printer.gcode_move.gcode_position.e} %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Prepair scanning" {% endif %}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}\' {% endif %}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}\' {% endif %}\nM83\nG0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}\n{% endif %}\nG91\nG0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Call %s" % pause_macro}\' {% endif %}\n{pause_macro}\n\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Start scanning" {% endif %}\n\nUPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True\nG90\nG0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}\n{% for ystep in range(stepoverCount) %}\nG0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}\nG0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}\n{% endfor %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Finish scanning" {% endif %}\n{% endif %}', 'description': 'Run a scan across the current print area', 'variable_first_layer_scan_retract_length': '6', 'variable_first_layer_scan_retract_speed': '15', 'variable_first_layer_scan_unretract_length': '6.5', 'variable_first_layer_scan_unretract_speed': '15', 'variable_first_layer_scan_resume_speed': '50', 'variable_first_layer_scan_enabled': 'True', 'variable_first_layer_scan_stepover': '10', 'variable_first_layer_scan_speed': '10', 'variable_first_layer_scan_zhop': '4', 'variable_first_layer_scan_zhop_speed': '15', 'variable_verbose': 'False', 'variable_current_layer': '-1', 'variable_first_layer_scanning': 'False', 'variable_wait': '{\'resume\': "RESUME", \'absolute_coordinates\': True, \'absolute_extrude\': True, \'e\': 0.0}'}, 'delayed_gcode _wait_obico_layer_change': {'gcode': '\n{% set lc_macro = printer[\'gcode_macro _OBICO_LAYER_CHANGE\'] %}\n{% if lc_macro.first_layer_scanning %}\n\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Waiting for first layer scan..." {% endif %}\nUPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0\n{% else %}\n\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Resume print" {% endif %}\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}\' {% endif %}\n{lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}\nG91\nG0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}\' {% endif %}\nM83\nG0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}\n{% endif %}\n\n\n{% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}\n{% if lc_macro.wait.absolute_extrude %}\nM82\nG92 E{lc_macro.wait.e}\n{% endif %}\n{% endif %}', 'initial_duration': 0.0}, 'printer': {'max_velocity': 300.0, 'max_accel': 3000.0, 'max_accel_to_decel': 1500.0, 'square_corner_velocity': 5.0, 'kinematics': 'corexy', 'max_z_velocity': 15.0, 'max_z_accel': 350.0}, 'force_move': {'enable_force_move': False}}, 'warnings': [], 'save_config_pending': False, 'save_config_pending_items': {}}}
2024-02-15 10:54:38,092 [printer.py:stop_tempstore_updates()] - Stopping tempstore
2024-02-15 10:54:38,092 [printer.py:reinit()] - Klipper version: v0.12.0-103-g6ce6fbbc
2024-02-15 10:54:38,093 [printer.py:reinit()] - # Extruders: 1
2024-02-15 10:54:38,093 [printer.py:reinit()] - # Temperature devices: 1
2024-02-15 10:54:38,093 [printer.py:reinit()] - # Fans: 3
2024-02-15 10:54:38,093 [printer.py:reinit()] - # Output pins: 0
2024-02-15 10:54:38,093 [printer.py:reinit()] - # Leds: 1
2024-02-15 10:54:38,112 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/gcode/help
2024-02-15 10:54:38,115 [KlippyWebsocket.py:object_subscription()] - Sending printer.objects.subscribe
2024-02-15 10:54:38,362 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/objects/query?bed_mesh&configfile&display_status&extruder&fan&gcode_move&heater_bed&idle_timeout&pause_resume&print_stats&toolhead&virtual_sdcard&webhooks&motion_report&firmware_retraction&exclude_object&manual_probe&extruder&heater_bed&fan&heater_fan hotend_fan&heater_fan controller_fan&neopixel sb_leds
2024-02-15 10:54:38,367 [files.py:set_gcodes_path()] - Gcodes path: /home/shiqi/printer_data/gcodes
2024-02-15 10:54:38,368 [KlippyWebsocket.py:get_file_list()] - Sending server.files.list
2024-02-15 10:54:38,371 [KlippyWebsocket.py:get_dir_info()] - Sending server.files.get_directory  gcodes
2024-02-15 10:54:38,372 [screen.py:init_klipper()] - Printer initialized
2024-02-15 10:54:38,373 [printer.py:change_state()] - Changing state from 'disconnected' to 'ready'
2024-02-15 10:54:38,373 [printer.py:change_state()] - Adding callback for state: ready
2024-02-15 10:54:38,379 [screen.py:_load_panel()] - Loading panel: main_menu
2024-02-15 10:54:38,450 [main_menu.py:__init__()] - ### Making MainMenu
2024-02-15 10:54:38,461 [main_menu.py:add_device()] - Adding device: extruder
2024-02-15 10:54:38,469 [main_menu.py:add_device()] - Adding device: heater_bed
2024-02-15 10:54:38,503 [screen.py:attach_panel()] - Current panel hierarchy: main_menu
2024-02-15 10:54:38,517 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/temperature_store
2024-02-15 10:54:38,521 [printer.py:init_temp_store()] - Temp store: ['heater_bed', 'extruder']
2024-02-15 10:54:38,532 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/config
2024-02-15 10:54:38,534 [screen.py:init_tempstore()] - Temperature store size: 1200
2024-02-15 10:54:40,484 [printer.py:change_state()] - Changing state from 'ready' to 'disconnected'
2024-02-15 10:54:40,484 [printer.py:change_state()] - Adding callback for state: disconnected
2024-02-15 10:54:40,484 [screen.py:state_disconnected()] - ### Going to disconnected
2024-02-15 10:54:40,485 [printer.py:stop_tempstore_updates()] - Stopping tempstore
2024-02-15 10:54:40,486 [screen.py:show_panel()] - Reinitializing panel
2024-02-15 10:54:40,527 [screen.py:attach_panel()] - Current panel hierarchy: splash_screen
2024-02-15 10:54:43,604 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/info
2024-02-15 10:54:43,613 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/webcams/list
2024-02-15 10:54:43,614 [printer.py:configure_cameras()] - Cameras: [{'name': 'camera0', 'enabled': True, 'icon': 'mdiWebcam', 'aspect_ratio': '16:9', 'target_fps': 30, 'target_fps_idle': 30, 'location': 'printer', 'service': 'mjpegstreamer-adaptive', 'stream_url': '/webcam/?action=stream', 'snapshot_url': '/webcam/?action=snapshot', 'flip_horizontal': False, 'flip_vertical': False, 'rotation': 0, 'source': 'config', 'extra_data': {}, 'uid': 'c3746231-7e67-5c0e-8f05-1e7bab1f89d2'}]
2024-02-15 10:54:43,614 [screen.py:init_klipper()] - Moonraker info {'klippy_connected': True, 'klippy_state': 'startup', 'components': ['secrets', 'template', 'klippy_connection', 'jsonrpc', 'internal_transport', 'application', 'websockets', 'dbus_manager', 'database', 'file_manager', 'authorization', 'klippy_apis', 'shell_command', 'machine', 'data_store', 'proc_stats', 'job_state', 'job_queue', 'http_client', 'announcements', 'webcam', 'extensions', 'octoprint_compat', 'history', 'update_manager'], 'failed_components': [], 'registered_directories': ['config', 'logs', 'gcodes', 'config_examples', 'docs'], 'warnings': [], 'websocket_count': 8, 'moonraker_version': 'v0.8.0-310-g67c98f6', 'missing_klippy_requirements': [], 'api_version': [1, 4, 0], 'api_version_string': '1.4.0'}
2024-02-15 10:54:43,625 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/info
2024-02-15 10:54:43,651 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/objects/query?configfile
2024-02-15 10:54:43,655 [screen.py:init_klipper()] - {'configfile': {'config': {'virtual_sdcard': {'path': '~/printer_data/gcodes', 'on_error_gcode': 'CANCEL_PRINT'}, 'pause_resume': {}, 'display_status': {}, 'respond': {}, 'gcode_macro CANCEL_PRINT': {'description': 'Cancel the actual running print', 'rename_existing': 'CANCEL_PRINT_BASE', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set allow_park = client.park_at_cancel|default(false)|lower == \'true\' %}\n{% set retract = client.cancel_retract|default(5.0)|abs %}\n\n{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)\nelse "X=" ~ client.park_at_cancel_x %}\n{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)\nelse "Y=" ~ client.park_at_cancel_y %}\n{% set custom_park = park_x|length > 0 or park_y|length > 0 %}\n\n\n{% if printer[\'gcode_macro RESUME\'].restore_idle_timeout > 0 %}\nSET_IDLE_TIMEOUT TIMEOUT={printer[\'gcode_macro RESUME\'].restore_idle_timeout}\n{% endif %}\n{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}\n_CLIENT_RETRACT LENGTH={retract}\nTURN_OFF_HEATERS\nM106 S0\n{client.user_cancel_macro|default("")}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False\n\nSET_PAUSE_NEXT_LAYER ENABLE=0\nSET_PAUSE_AT_LAYER ENABLE=0 LAYER=0\nCANCEL_PRINT_BASE'}, 'gcode_macro PAUSE': {'description': 'Pause the actual running print', 'rename_existing': 'PAUSE_BASE', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set idle_timeout = client.idle_timeout|default(0) %}\n{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != \'\' else 0 %}\n{% set restore = False if printer.toolhead.extruder == \'\'\nelse True  if params.RESTORE|default(1)|int == 1 else False %}\n\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{\'restore\': restore, \'temp\': temp}}"\n\n{% if idle_timeout > 0 %}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}\nSET_IDLE_TIMEOUT TIMEOUT={idle_timeout}\n{% endif %}\nPAUSE_BASE\n{client.user_pause_macro|default("")}\n_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}'}, 'gcode_macro RESUME': {'description': 'Resume the actual running print', 'rename_existing': 'RESUME_BASE', 'variable_last_extruder_temp': "{'restore': False, 'temp': 0}", 'variable_restore_idle_timeout': '0', 'variable_idle_state': 'False', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}\n{% set sp_move = client.speed_move|default(velocity) %}\n{% set runout_resume = True if client.runout_sensor|default("") == ""\nelse True if not printer[client.runout_sensor].enabled\nelse printer[client.runout_sensor].filament_detected %}\n{% set can_extrude = True if printer.toolhead.extruder == \'\'\nelse printer[printer.toolhead.extruder].can_extrude %}\n{% set do_resume = False %}\n{% set prompt_txt = [] %}\n\n\n{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False\n{% if last_extruder_temp.restore %}\n\nRESPOND TYPE=echo MSG=\'{"Restoring \\"%s\\" temperature to %3.1f\\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }\'\nM109 S{last_extruder_temp.temp}\n{% set do_resume = True %}\n{% elif can_extrude %}\n{% set do_resume = True %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}\'\n{% set _d = prompt_txt.append("\\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}\n{% endif %}\n\n{% elif can_extrude %}\n{% set do_resume = True %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}\'\n{% set _d = prompt_txt.append("\\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}\n{% endif %}\n{% if runout_resume %}\n{% if do_resume %}\n{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}\n{client.user_resume_macro|default("")}\n_CLIENT_EXTRUDE\nRESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}\n{% endif %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}\'\n{% set _d = prompt_txt.append("\\"%s\\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}\n{% endif %}\n\n{% if not (runout_resume and do_resume) %}\nRESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"\n{% for element in prompt_txt %}\nRESPOND TYPE=command MSG=\'{"action:prompt_text %s" % element}\'\n{% endfor %}\nRESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"\nRESPOND TYPE=command MSG="action:prompt_show"\n{% endif %}'}, 'gcode_macro SET_PAUSE_NEXT_LAYER': {'description': 'Enable a pause if the next layer is reached', 'gcode': '\n{% set pause_next_layer = printer[\'gcode_macro SET_PRINT_STATS_INFO\'].pause_next_layer %}\n{% set ENABLE = params.ENABLE|default(1)|int != 0 %}\n{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}\nSET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ \'enable\': ENABLE, \'call\': MACRO }}"'}, 'gcode_macro SET_PAUSE_AT_LAYER': {'description': 'Enable/disable a pause if a given layer number is reached', 'gcode': '\n{% set pause_at_layer = printer[\'gcode_macro SET_PRINT_STATS_INFO\'].pause_at_layer %}\n{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined\nelse params.LAYER is defined %}\n{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}\n{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}\nSET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ \'enable\': ENABLE, \'layer\': LAYER, \'call\': MACRO }}"'}, 'gcode_macro SET_PRINT_STATS_INFO': {'rename_existing': 'SET_PRINT_STATS_INFO_BASE', 'description': 'Overwrite, to get pause_next_layer and pause_at_layer feature', 'variable_pause_next_layer': '{ \'enable\': False, \'call\': "PAUSE" }', 'variable_pause_at_layer': '{ \'enable\': False, \'layer\': 0, \'call\': "PAUSE" }', 'gcode': '\n{% if pause_next_layer.enable %}\nRESPOND TYPE=echo MSG=\'{"%s, forced by pause_next_layer" % pause_next_layer.call}\'\n{pause_next_layer.call}\nSET_PAUSE_NEXT_LAYER ENABLE=0\n{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}\nRESPOND TYPE=echo MSG=\'{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}\'\n{pause_at_layer.call}\nSET_PAUSE_AT_LAYER ENABLE=0\n{% endif %}\nSET_PRINT_STATS_INFO_BASE {rawparams}'}, 'gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL': {'description': 'Helper: park toolhead used in PAUSE and CANCEL_PRINT', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}\n{% set use_custom     = client.use_custom_pos|default(false)|lower == \'true\' %}\n{% set custom_park_x  = client.custom_park_x|default(0.0) %}\n{% set custom_park_y  = client.custom_park_y|default(0.0) %}\n{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}\n{% set sp_hop         = client.speed_hop|default(15) * 60 %}\n{% set sp_move        = client.speed_move|default(velocity) * 60 %}\n\n{% set origin    = printer.gcode_move.homing_origin %}\n{% set act       = printer.gcode_move.gcode_position %}\n{% set max       = printer.toolhead.axis_maximum %}\n{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}\n{% set round_bed = True if printer.configfile.settings.printer.kinematics is in [\'delta\',\'polar\',\'rotary_delta\',\'winch\']\nelse False %}\n\n{% set z_min = params.Z_MIN|default(0)|float %}\n{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}\n{% set x_park = params.X       if params.X is defined\nelse custom_park_x  if use_custom\nelse 0.0            if round_bed\nelse (max.x - 5.0) %}\n{% set y_park = params.Y       if params.Y is defined\nelse custom_park_y  if use_custom\nelse (max.y - 5.0)  if round_bed and z_park < cone\nelse 0.0            if round_bed\nelse (max.y - 5.0) %}\n\n_CLIENT_RETRACT\n{% if "xyz" in printer.toolhead.homed_axes %}\nG90\nG1 Z{z_park} F{sp_hop}\nG1 X{x_park} Y{y_park} F{sp_move}\n{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}\n{% else %}\nRESPOND TYPE=echo MSG=\'Printer not homed\'\n{% endif %}'}, 'gcode_macro _CLIENT_EXTRUDE': {'description': 'Extrudes, if the extruder is hot enough', 'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == \'true\') and (printer.firmware_retraction is defined) %}\n{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}\n{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}\n{% set absolute_extrude = printer.gcode_move.absolute_extrude %}\n\n{% if printer.toolhead.extruder != \'\' %}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if use_fw_retract %}\n{% if length < 0 %}\nG10\n{% else %}\nG11\n{% endif %}\n{% else %}\nM83\nG1 E{length} F{(speed|float|abs) * 60}\n{% if absolute_extrude %}\nM82\n{% endif %}\n{% endif %}\n{% else %}\nRESPOND TYPE=echo MSG=\'{"\\"%s\\" not hot enough" % printer.toolhead.extruder}\'\n{% endif %}\n{% endif %}'}, 'gcode_macro _CLIENT_RETRACT': {'description': 'Retracts, if the extruder is hot enough', 'gcode': "\n{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}\n{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}\n{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}\n\n_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}"}, 'neopixel sb_leds': {'pin': 'PC5', 'chain_count': '3', 'color_order': 'GRBW', 'initial_red': '1.0', 'initial_green': '0.0', 'initial_blue': '1.0', 'initial_white': '0.0'}, 'gcode_macro _sb_vars': {'variable_colors': "{\n'logo': {\n'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'cleaning': {'r': 0.0, 'g': 0.02, 'b': 0.5, 'w': 0.0},\n'calibrating_z': {'r': 0.8, 'g': 0., 'b': 0.35, 'w': 0.0},\n'heating': {'r': 0.3, 'g': 0.18, 'b': 0.0, 'w': 0.0},\n'homing': {'r': 0.0, 'g': 0.6, 'b': 0.2, 'w': 0.0},\n'leveling': {'r': 0.5, 'g': 0.1, 'b': 0.4, 'w': 0.0},\n'meshing': {'r': 0.2, 'g': 1.0, 'b': 0.0, 'w': 0.0},\n'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'printing': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'standby': {'r': 0.01, 'g': 0.01, 'b': 0.01, 'w': 0.1},\n},\n'nozzle': {\n'heating': {'r': 0.8, 'g': 0.35, 'b': 0.0, 'w':0.0},\n'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'on': {'r': 0.8, 'g': 0.8, 'b': 0.8, 'w':1.0},\n'standby': {'r': 0.6, 'g': 0.0, 'b': 0.0, 'w':0.0},\n},\n'thermal': {\n'hot': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'cold': {'r': 0.3, 'g': 0.0, 'b': 0.3, 'w': 0.0}\n}\n}", 'variable_logo_led_name': '"sb_leds"', 'variable_logo_idx': '"1"', 'variable_nozzle_led_name': '"sb_leds"', 'variable_nozzle_idx': '"2,3"', 'gcode': ''}, 'gcode_macro _set_sb_leds': {'gcode': "\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = params.LED|string %}\n{% set idx = (params.IDX|string).split(',') %}\n{% set transmit_last = params.TRANSMIT|default(1) %}\n\n{% for led_index in idx %}\n{% set transmit=transmit_last if loop.last else 0 %}\nset_led led={led} red={red} green={green} blue={blue} white={white} index={led_index} transmit={transmit}\n{% endfor %}"}, 'gcode_macro _set_sb_leds_by_name': {'gcode': '\n{% set leds_name = params.LEDS %}\n{% set color_name = params.COLOR %}\n{% set color = printer["gcode_macro _sb_vars"].colors[leds_name][color_name] %}\n{% set led = printer["gcode_macro _sb_vars"][leds_name + "_led_name"] %}\n{% set idx = printer["gcode_macro _sb_vars"][leds_name + "_idx"] %}\n{% set transmit = params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={color.r} green={color.g} blue={color.b} white={color.w} idx="{idx}" transmit={transmit}'}, 'gcode_macro _set_logo_leds': {'gcode': '\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = printer["gcode_macro _sb_vars"].logo_led_name %}\n{% set idx = printer["gcode_macro _sb_vars"].logo_idx %}\n{% set transmit=params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}'}, 'gcode_macro _set_nozzle_leds': {'gcode': '\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = printer["gcode_macro _sb_vars"].nozzle_led_name %}\n{% set idx = printer["gcode_macro _sb_vars"].nozzle_idx %}\n{% set transmit=params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}'}, 'gcode_macro set_logo_leds_off': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_logo_leds red=0 blue=0 green=0 white=0 transmit={transmit}'}, 'gcode_macro set_nozzle_leds_on': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_sb_leds_by_name leds="nozzle" color="on" transmit={transmit}'}, 'gcode_macro set_nozzle_leds_off': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_sb_leds_by_name leds="nozzle" color="off" transmit={transmit}'}, 'gcode_macro status_off': {'gcode': '\nset_logo_leds_off transmit=0\nset_nozzle_leds_off'}, 'gcode_macro status_ready': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="standby" transmit=0\n_set_sb_leds_by_name leds="nozzle" color="standby" transmit=1'}, 'gcode_macro status_busy': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="busy" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_heating': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="heating" transmit=0\n_set_sb_leds_by_name leds="nozzle" color="heating" transmit=1'}, 'gcode_macro status_leveling': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="leveling" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_homing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="homing" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_cleaning': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="cleaning" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_meshing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="meshing" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_calibrating_z': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="calibrating_z" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro status_printing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="printing" transmit=0\nset_nozzle_leds_on'}, 'gcode_macro LOAD_FILAMENT': {'variable_load_distance': '50', 'variable_purge_distance': '25', 'gcode': "\n{% set speed = params.SPEED|default(300) %}\n{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity  * 60 %}\nSAVE_GCODE_STATE NAME=load_state\nG91\nG92 E0\nG1 E{load_distance} F{max_velocity}\nG1 E{purge_distance} F{speed}\nRESTORE_GCODE_STATE NAME=load_state"}, 'gcode_macro UNLOAD_FILAMENT': {'variable_unload_distance': '50', 'variable_purge_distance': '25', 'gcode': "\n{% set speed = params.SPEED|default(300) %}\n{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity  * 60 %}\nSAVE_GCODE_STATE NAME=unload_state\nG91\nG92 E0\nG1 E{purge_distance} F{speed}\nG1 E-{unload_distance} F{max_velocity}\nRESTORE_GCODE_STATE NAME=unload_state"}, 'mcu': {'serial': '/dev/serial/by-id/usb-Klipper_stm32f407xx_2D003B000551323438323933-if00', 'restart_method': 'command'}, 'printer': {'kinematics': 'corexy', 'max_velocity': '300', 'max_accel': '3000', 'max_z_velocity': '15', 'max_z_accel': '350', 'square_corner_velocity': '5.0'}, 'stepper_x': {'step_pin': 'PC14', 'dir_pin': '!PC13', 'enable_pin': '!PC15', 'rotation_distance': '40', 'microsteps': '256', 'full_steps_per_rotation': '200', 'endstop_pin': 'PA14', 'position_min': '0', 'position_endstop': '250', 'position_max': '250', 'homing_speed': '25', 'homing_retract_dist': '5', 'homing_positive_dir': 'true'}, 'tmc2209 stepper_x': {'uart_pin': 'PE6', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_y': {'step_pin': 'PE5', 'dir_pin': '!PE4', 'enable_pin': '!PC15', 'rotation_distance': '40', 'microsteps': '256', 'full_steps_per_rotation': '200', 'endstop_pin': 'PA15', 'position_min': '0', 'position_endstop': '250', 'position_max': '250', 'homing_speed': '25', 'homing_retract_dist': '5', 'homing_positive_dir': 'true'}, 'tmc2209 stepper_y': {'uart_pin': 'PE3', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_z': {'step_pin': 'PE1', 'dir_pin': 'PE0', 'enable_pin': '!PE2', 'rotation_distance': '40', 'gear_ratio': '80:16', 'microsteps': '256', 'endstop_pin': 'probe:z_virtual_endstop', 'position_max': '240', 'position_min': '-5', 'homing_speed': '8', 'second_homing_speed': '3', 'homing_retract_dist': '3'}, 'tmc2209 stepper_z': {'uart_pin': 'PB7', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_z1': {'step_pin': 'PB5', 'dir_pin': '!PB4', 'enable_pin': '!PB6', 'rotation_distance': '40', 'gear_ratio': '80:16', 'microsteps': '256'}, 'tmc2209 stepper_z1': {'uart_pin': 'PB3', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_z2': {'step_pin': 'PD6', 'dir_pin': 'PD5', 'enable_pin': '!PD7', 'rotation_distance': '40', 'gear_ratio': '80:16', 'microsteps': '256'}, 'tmc2209 stepper_z2': {'uart_pin': 'PD4', 'interpolate': 'False', 'run_current': '0.7', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'stepper_z3': {'step_pin': 'PD2', 'dir_pin': '!PD1', 'enable_pin': '!PD3', 'rotation_distance': '40', 'gear_ratio': '80:16', 'microsteps': '256'}, 'tmc2209 stepper_z3': {'uart_pin': 'PD0', 'interpolate': 'False', 'run_current': '0.87', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'extruder': {'step_pin': 'PD13', 'dir_pin': 'PD12', 'enable_pin': '!PD14', 'rotation_distance': '22.6789511', 'gear_ratio': '50:17', 'microsteps': '256', 'full_steps_per_rotation': '200', 'nozzle_diameter': '0.400', 'filament_diameter': '1.75', 'heater_pin': 'PB1', 'sensor_type': 'Generic 3950', 'sensor_pin': 'PC1', 'min_temp': '10', 'max_temp': '270', 'max_power': '1.0', 'min_extrude_temp': '170', 'pressure_advance': '0.04', 'pressure_advance_smooth_time': '0.040', 'control': 'pid', 'pid_kp': '18.026', 'pid_ki': '0.683', 'pid_kd': '118.969'}, 'tmc2209 extruder': {'uart_pin': 'PD11', 'interpolate': 'False', 'run_current': '0.5', 'sense_resistor': '0.110', 'stealthchop_threshold': '0'}, 'heater_bed': {'heater_pin': 'PB10', 'sensor_type': 'Generic 3950', 'sensor_pin': 'PC0', 'max_power': '0.6', 'min_temp': '0', 'max_temp': '120', 'control': 'pid', 'pid_kp': '40.738', 'pid_ki': '1.181', 'pid_kd': '351.369'}, 'probe': {'pin': 'PB12', 'x_offset': '0', 'y_offset': '0', 'z_offset': '0', 'speed': '10.0', 'samples': '3', 'samples_result': 'median', 'sample_retract_dist': '3.0', 'samples_tolerance': '0.006', 'samples_tolerance_retries': '3', 'activate_gcode': "\n{% set PROBE_TEMP = 150 %}\n{% set MAX_TEMP = PROBE_TEMP + 5 %}\n{% set ACTUAL_TEMP = printer.extruder.temperature %}\n{% set TARGET_TEMP = printer.extruder.target %}\n\n{% if TARGET_TEMP > PROBE_TEMP %}\n{ action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) }\nM109 S{ PROBE_TEMP }\n{% else %}\n\n{% if ACTUAL_TEMP > MAX_TEMP %}\n{ action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) }\nTEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP }\n{% endif %}\n{% endif %}"}, 'heater_fan hotend_fan': {'pin': 'PA2', 'max_power': '1.0', 'kick_start_time': '0.5', 'heater': 'extruder', 'heater_temp': '50.0'}, 'fan': {'pin': 'PA1', 'kick_start_time': '0.5', 'off_below': '0.10'}, 'heater_fan controller_fan': {'pin': 'PB0', 'kick_start_time': '0.5', 'heater': 'heater_bed', 'heater_temp': '45.0'}, 'idle_timeout': {'timeout': '1800'}, 'safe_z_home': {'home_xy_position': '125,125', 'speed': '100', 'z_hop': '10'}, 'quad_gantry_level': {'gantry_corners': '\n-60,-10\n310, 320', 'points': '\n50,25\n50,175\n200,175\n200,25', 'speed': '100', 'horizontal_move_z': '10', 'retries': '5', 'retry_tolerance': '0.0075', 'max_adjust': '10'}, 'board_pins': {'aliases': '\n\nEXP1_10=<5V>, EXP1_9=<GND>,\nEXP1_8=PE7,   EXP1_7=PE15,\nEXP1_6=PD8,  EXP1_5=PD9,\nEXP1_4=PD10,   EXP1_3=PE11,\nEXP1_2=PE10,   EXP1_1=PB2,\n\n\nEXP2_10=<5V>, EXP2_9=<GND>,\nEXP2_8=<RST>, EXP2_7=PB11,\nEXP2_6=PA7,   EXP2_5=PE8,\nEXP2_4=PA4,   EXP2_3=PE9,\nEXP2_2=PA5,   EXP2_1=PA6'}, 'verify_heater extruder': {'max_error': '240', 'check_gain_time': '5000'}, 'gcode_macro PARK': {'gcode': '\n{% set th = printer.toolhead %}\nG0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y//2} Z30'}, 'gcode_macro G32': {'gcode': '\nSAVE_GCODE_STATE NAME=STATE_G32\nG90\nG28\nQUAD_GANTRY_LEVEL\nG28\nPARK\nRESTORE_GCODE_STATE NAME=STATE_G32'}, 'gcode_macro PRINT_START': {'gcode': '\nG32\nG90\nG1 Z20 F3000'}, 'gcode_macro PRINT_END': {'gcode': '\n\n{% set th = printer.toolhead %}\n{% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %}\n{% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %}\n{% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %}\n\nSAVE_GCODE_STATE NAME=STATE_PRINT_END\n\nM400\nG92 E0\nG1 E-5.0 F1800\n\nTURN_OFF_HEATERS\n\nG90\nG0 X{x_safe} Y{y_safe} Z{z_safe} F20000\nG0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600\nM107\n\nBED_MESH_CLEAR\n\n\n\n\n\n\nRESTORE_GCODE_STATE NAME=STATE_PRINT_END MOVE=0'}, 'input_shaper': {'shaper_type_x': 'mzv', 'shaper_freq_x': '43.0', 'shaper_type_y': 'mzv', 'shaper_freq_y': '43.2'}, 'gcode_macro _OBICO_LAYER_CHANGE': {'description': 'Run a scan across the current print area', 'variable_first_layer_scan_retract_length': '6', 'variable_first_layer_scan_retract_speed': '15', 'variable_first_layer_scan_unretract_length': '6.5', 'variable_first_layer_scan_unretract_speed': '15', 'variable_first_layer_scan_resume_speed': '50', 'variable_first_layer_scan_enabled': 'True', 'variable_first_layer_scan_stepover': '10', 'variable_first_layer_scan_speed': '10', 'variable_first_layer_scan_zhop': '4', 'variable_first_layer_scan_zhop_speed': '15', 'variable_verbose': 'False', 'variable_current_layer': '-1', 'variable_first_layer_scanning': 'False', 'variable_wait': '{\'resume\': "RESUME", \'absolute_coordinates\': True, \'absolute_extrude\': True, \'e\': 0.0}', 'gcode': '\n\n{% set pause_macro  = "PAUSE"  if printer.configfile.settings[\'gcode_macro pause\']  is not defined\nelse printer.configfile.settings[\'gcode_macro pause\'].rename_existing %}\n{% set resume_macro = "RESUME" if printer.configfile.settings[\'gcode_macro resume\'] is not defined\nelse printer.configfile.settings[\'gcode_macro resume\'].rename_existing %}\n\n{% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}\n{% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}\n\n{% set polygon_points = printer.exclude_object.objects|map(attribute=\'polygon\')|sum(start=[]) if printer.exclude_object is defined else [] %}\n{% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}\n{% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}\n{% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}\n{% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}\n\n{% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method=\'ceil\')|int %}\n\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Layer %d" % (current_layer)}\' {% endif %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}\n\n{% if first_layer_scan_enabled and current_layer == 2 %}\n\n{% set wait_dic = {\'resume\'              : resume_macro,\n\'absolute_coordinates\': printer.gcode_move.absolute_coordinates,\n\'absolute_extrude\'    : printer.gcode_move.absolute_extrude,\n\'e\'                   : printer.gcode_move.gcode_position.e} %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Prepair scanning" {% endif %}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}\' {% endif %}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}\' {% endif %}\nM83\nG0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}\n{% endif %}\nG91\nG0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Call %s" % pause_macro}\' {% endif %}\n{pause_macro}\n\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Start scanning" {% endif %}\n\nUPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True\nG90\nG0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}\n{% for ystep in range(stepoverCount) %}\nG0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}\nG0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}\n{% endfor %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Finish scanning" {% endif %}\n{% endif %}'}, 'delayed_gcode _WAIT_OBICO_LAYER_CHANGE': {'gcode': '\n{% set lc_macro = printer[\'gcode_macro _OBICO_LAYER_CHANGE\'] %}\n{% if lc_macro.first_layer_scanning %}\n\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Waiting for first layer scan..." {% endif %}\nUPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0\n{% else %}\n\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Resume print" {% endif %}\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}\' {% endif %}\n{lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}\nG91\nG0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}\' {% endif %}\nM83\nG0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}\n{% endif %}\n\n\n{% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}\n{% if lc_macro.wait.absolute_extrude %}\nM82\nG92 E{lc_macro.wait.e}\n{% endif %}\n{% endif %}'}}, 'settings': {'mcu': {'serial': '/dev/serial/by-id/usb-Klipper_stm32f407xx_2D003B000551323438323933-if00', 'baud': 250000, 'restart_method': 'command', 'max_stepper_error': 2.5e-05}, 'virtual_sdcard': {'path': '~/printer_data/gcodes', 'on_error_gcode': 'CANCEL_PRINT'}, 'pause_resume': {'recover_velocity': 50.0}, 'respond': {'default_type': 'echo', 'default_prefix': 'echo:'}, 'gcode_macro cancel_print': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set allow_park = client.park_at_cancel|default(false)|lower == \'true\' %}\n{% set retract = client.cancel_retract|default(5.0)|abs %}\n\n{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)\nelse "X=" ~ client.park_at_cancel_x %}\n{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)\nelse "Y=" ~ client.park_at_cancel_y %}\n{% set custom_park = park_x|length > 0 or park_y|length > 0 %}\n\n\n{% if printer[\'gcode_macro RESUME\'].restore_idle_timeout > 0 %}\nSET_IDLE_TIMEOUT TIMEOUT={printer[\'gcode_macro RESUME\'].restore_idle_timeout}\n{% endif %}\n{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}\n_CLIENT_RETRACT LENGTH={retract}\nTURN_OFF_HEATERS\nM106 S0\n{client.user_cancel_macro|default("")}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False\n\nSET_PAUSE_NEXT_LAYER ENABLE=0\nSET_PAUSE_AT_LAYER ENABLE=0 LAYER=0\nCANCEL_PRINT_BASE', 'rename_existing': 'CANCEL_PRINT_BASE', 'description': 'Cancel the actual running print'}, 'gcode_macro pause': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set idle_timeout = client.idle_timeout|default(0) %}\n{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != \'\' else 0 %}\n{% set restore = False if printer.toolhead.extruder == \'\'\nelse True  if params.RESTORE|default(1)|int == 1 else False %}\n\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{\'restore\': restore, \'temp\': temp}}"\n\n{% if idle_timeout > 0 %}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}\nSET_IDLE_TIMEOUT TIMEOUT={idle_timeout}\n{% endif %}\nPAUSE_BASE\n{client.user_pause_macro|default("")}\n_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}', 'rename_existing': 'PAUSE_BASE', 'description': 'Pause the actual running print'}, 'gcode_macro resume': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}\n{% set sp_move = client.speed_move|default(velocity) %}\n{% set runout_resume = True if client.runout_sensor|default("") == ""\nelse True if not printer[client.runout_sensor].enabled\nelse printer[client.runout_sensor].filament_detected %}\n{% set can_extrude = True if printer.toolhead.extruder == \'\'\nelse printer[printer.toolhead.extruder].can_extrude %}\n{% set do_resume = False %}\n{% set prompt_txt = [] %}\n\n\n{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}\nSET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False\n{% if last_extruder_temp.restore %}\n\nRESPOND TYPE=echo MSG=\'{"Restoring \\"%s\\" temperature to %3.1f\\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }\'\nM109 S{last_extruder_temp.temp}\n{% set do_resume = True %}\n{% elif can_extrude %}\n{% set do_resume = True %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}\'\n{% set _d = prompt_txt.append("\\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}\n{% endif %}\n\n{% elif can_extrude %}\n{% set do_resume = True %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}\'\n{% set _d = prompt_txt.append("\\"%s\\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}\n{% endif %}\n{% if runout_resume %}\n{% if do_resume %}\n{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}\n{client.user_resume_macro|default("")}\n_CLIENT_EXTRUDE\nRESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}\n{% endif %}\n{% else %}\nRESPOND TYPE=error MSG=\'{"Resume aborted !!! \\"%s\\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}\'\n{% set _d = prompt_txt.append("\\"%s\\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}\n{% endif %}\n\n{% if not (runout_resume and do_resume) %}\nRESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"\n{% for element in prompt_txt %}\nRESPOND TYPE=command MSG=\'{"action:prompt_text %s" % element}\'\n{% endfor %}\nRESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"\nRESPOND TYPE=command MSG="action:prompt_show"\n{% endif %}', 'rename_existing': 'RESUME_BASE', 'description': 'Resume the actual running print', 'variable_last_extruder_temp': "{'restore': False, 'temp': 0}", 'variable_restore_idle_timeout': '0', 'variable_idle_state': 'False'}, 'gcode_macro set_pause_next_layer': {'gcode': '\n{% set pause_next_layer = printer[\'gcode_macro SET_PRINT_STATS_INFO\'].pause_next_layer %}\n{% set ENABLE = params.ENABLE|default(1)|int != 0 %}\n{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}\nSET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ \'enable\': ENABLE, \'call\': MACRO }}"', 'description': 'Enable a pause if the next layer is reached'}, 'gcode_macro set_pause_at_layer': {'gcode': '\n{% set pause_at_layer = printer[\'gcode_macro SET_PRINT_STATS_INFO\'].pause_at_layer %}\n{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined\nelse params.LAYER is defined %}\n{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}\n{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}\nSET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ \'enable\': ENABLE, \'layer\': LAYER, \'call\': MACRO }}"', 'description': 'Enable/disable a pause if a given layer number is reached'}, 'gcode_macro set_print_stats_info': {'gcode': '\n{% if pause_next_layer.enable %}\nRESPOND TYPE=echo MSG=\'{"%s, forced by pause_next_layer" % pause_next_layer.call}\'\n{pause_next_layer.call}\nSET_PAUSE_NEXT_LAYER ENABLE=0\n{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}\nRESPOND TYPE=echo MSG=\'{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}\'\n{pause_at_layer.call}\nSET_PAUSE_AT_LAYER ENABLE=0\n{% endif %}\nSET_PRINT_STATS_INFO_BASE {rawparams}', 'rename_existing': 'SET_PRINT_STATS_INFO_BASE', 'description': 'Overwrite, to get pause_next_layer and pause_at_layer feature', 'variable_pause_next_layer': '{ \'enable\': False, \'call\': "PAUSE" }', 'variable_pause_at_layer': '{ \'enable\': False, \'layer\': 0, \'call\': "PAUSE" }'}, 'gcode_macro _toolhead_park_pause_cancel': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}\n{% set use_custom     = client.use_custom_pos|default(false)|lower == \'true\' %}\n{% set custom_park_x  = client.custom_park_x|default(0.0) %}\n{% set custom_park_y  = client.custom_park_y|default(0.0) %}\n{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}\n{% set sp_hop         = client.speed_hop|default(15) * 60 %}\n{% set sp_move        = client.speed_move|default(velocity) * 60 %}\n\n{% set origin    = printer.gcode_move.homing_origin %}\n{% set act       = printer.gcode_move.gcode_position %}\n{% set max       = printer.toolhead.axis_maximum %}\n{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}\n{% set round_bed = True if printer.configfile.settings.printer.kinematics is in [\'delta\',\'polar\',\'rotary_delta\',\'winch\']\nelse False %}\n\n{% set z_min = params.Z_MIN|default(0)|float %}\n{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}\n{% set x_park = params.X       if params.X is defined\nelse custom_park_x  if use_custom\nelse 0.0            if round_bed\nelse (max.x - 5.0) %}\n{% set y_park = params.Y       if params.Y is defined\nelse custom_park_y  if use_custom\nelse (max.y - 5.0)  if round_bed and z_park < cone\nelse 0.0            if round_bed\nelse (max.y - 5.0) %}\n\n_CLIENT_RETRACT\n{% if "xyz" in printer.toolhead.homed_axes %}\nG90\nG1 Z{z_park} F{sp_hop}\nG1 X{x_park} Y{y_park} F{sp_move}\n{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}\n{% else %}\nRESPOND TYPE=echo MSG=\'Printer not homed\'\n{% endif %}', 'description': 'Helper: park toolhead used in PAUSE and CANCEL_PRINT'}, 'gcode_macro _client_extrude': {'gcode': '\n\n{% set client = printer[\'gcode_macro _CLIENT_VARIABLE\']|default({}) %}\n{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == \'true\') and (printer.firmware_retraction is defined) %}\n{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}\n{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}\n{% set absolute_extrude = printer.gcode_move.absolute_extrude %}\n\n{% if printer.toolhead.extruder != \'\' %}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if use_fw_retract %}\n{% if length < 0 %}\nG10\n{% else %}\nG11\n{% endif %}\n{% else %}\nM83\nG1 E{length} F{(speed|float|abs) * 60}\n{% if absolute_extrude %}\nM82\n{% endif %}\n{% endif %}\n{% else %}\nRESPOND TYPE=echo MSG=\'{"\\"%s\\" not hot enough" % printer.toolhead.extruder}\'\n{% endif %}\n{% endif %}', 'description': 'Extrudes, if the extruder is hot enough'}, 'gcode_macro _client_retract': {'gcode': "\n{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}\n{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}\n{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}\n\n_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}", 'description': 'Retracts, if the extruder is hot enough'}, 'neopixel sb_leds': {'pin': 'PC5', 'chain_count': 3, 'color_order': ['GRBW'], 'initial_red': 1.0, 'initial_green': 0.0, 'initial_blue': 1.0, 'initial_white': 0.0}, 'gcode_macro _sb_vars': {'gcode': '', 'description': 'G-Code macro', 'variable_colors': "{\n'logo': {\n'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'cleaning': {'r': 0.0, 'g': 0.02, 'b': 0.5, 'w': 0.0},\n'calibrating_z': {'r': 0.8, 'g': 0., 'b': 0.35, 'w': 0.0},\n'heating': {'r': 0.3, 'g': 0.18, 'b': 0.0, 'w': 0.0},\n'homing': {'r': 0.0, 'g': 0.6, 'b': 0.2, 'w': 0.0},\n'leveling': {'r': 0.5, 'g': 0.1, 'b': 0.4, 'w': 0.0},\n'meshing': {'r': 0.2, 'g': 1.0, 'b': 0.0, 'w': 0.0},\n'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'printing': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'standby': {'r': 0.01, 'g': 0.01, 'b': 0.01, 'w': 0.1},\n},\n'nozzle': {\n'heating': {'r': 0.8, 'g': 0.35, 'b': 0.0, 'w':0.0},\n'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'on': {'r': 0.8, 'g': 0.8, 'b': 0.8, 'w':1.0},\n'standby': {'r': 0.6, 'g': 0.0, 'b': 0.0, 'w':0.0},\n},\n'thermal': {\n'hot': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},\n'cold': {'r': 0.3, 'g': 0.0, 'b': 0.3, 'w': 0.0}\n}\n}", 'variable_logo_led_name': '"sb_leds"', 'variable_logo_idx': '"1"', 'variable_nozzle_led_name': '"sb_leds"', 'variable_nozzle_idx': '"2,3"'}, 'gcode_macro _set_sb_leds': {'gcode': "\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = params.LED|string %}\n{% set idx = (params.IDX|string).split(',') %}\n{% set transmit_last = params.TRANSMIT|default(1) %}\n\n{% for led_index in idx %}\n{% set transmit=transmit_last if loop.last else 0 %}\nset_led led={led} red={red} green={green} blue={blue} white={white} index={led_index} transmit={transmit}\n{% endfor %}", 'description': 'G-Code macro'}, 'gcode_macro _set_sb_leds_by_name': {'gcode': '\n{% set leds_name = params.LEDS %}\n{% set color_name = params.COLOR %}\n{% set color = printer["gcode_macro _sb_vars"].colors[leds_name][color_name] %}\n{% set led = printer["gcode_macro _sb_vars"][leds_name + "_led_name"] %}\n{% set idx = printer["gcode_macro _sb_vars"][leds_name + "_idx"] %}\n{% set transmit = params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={color.r} green={color.g} blue={color.b} white={color.w} idx="{idx}" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro _set_logo_leds': {'gcode': '\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = printer["gcode_macro _sb_vars"].logo_led_name %}\n{% set idx = printer["gcode_macro _sb_vars"].logo_idx %}\n{% set transmit=params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro _set_nozzle_leds': {'gcode': '\n{% set red = params.RED|default(0)|float %}\n{% set green = params.GREEN|default(0)|float %}\n{% set blue = params.BLUE|default(0)|float %}\n{% set white = params.WHITE|default(0)|float %}\n{% set led = printer["gcode_macro _sb_vars"].nozzle_led_name %}\n{% set idx = printer["gcode_macro _sb_vars"].nozzle_idx %}\n{% set transmit=params.TRANSMIT|default(1) %}\n\n_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro set_logo_leds_off': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_logo_leds red=0 blue=0 green=0 white=0 transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro set_nozzle_leds_on': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_sb_leds_by_name leds="nozzle" color="on" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro set_nozzle_leds_off': {'gcode': '\n{% set transmit=params.TRANSMIT|default(1) %}\n_set_sb_leds_by_name leds="nozzle" color="off" transmit={transmit}', 'description': 'G-Code macro'}, 'gcode_macro status_off': {'gcode': '\nset_logo_leds_off transmit=0\nset_nozzle_leds_off', 'description': 'G-Code macro'}, 'gcode_macro status_ready': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="standby" transmit=0\n_set_sb_leds_by_name leds="nozzle" color="standby" transmit=1', 'description': 'G-Code macro'}, 'gcode_macro status_busy': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="busy" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_heating': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="heating" transmit=0\n_set_sb_leds_by_name leds="nozzle" color="heating" transmit=1', 'description': 'G-Code macro'}, 'gcode_macro status_leveling': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="leveling" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_homing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="homing" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_cleaning': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="cleaning" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_meshing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="meshing" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_calibrating_z': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="calibrating_z" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro status_printing': {'gcode': '\n_set_sb_leds_by_name leds="logo" color="printing" transmit=0\nset_nozzle_leds_on', 'description': 'G-Code macro'}, 'gcode_macro load_filament': {'gcode': "\n{% set speed = params.SPEED|default(300) %}\n{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity  * 60 %}\nSAVE_GCODE_STATE NAME=load_state\nG91\nG92 E0\nG1 E{load_distance} F{max_velocity}\nG1 E{purge_distance} F{speed}\nRESTORE_GCODE_STATE NAME=load_state", 'description': 'G-Code macro', 'variable_load_distance': '50', 'variable_purge_distance': '25'}, 'gcode_macro unload_filament': {'gcode': "\n{% set speed = params.SPEED|default(300) %}\n{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity  * 60 %}\nSAVE_GCODE_STATE NAME=unload_state\nG91\nG92 E0\nG1 E{purge_distance} F{speed}\nG1 E-{unload_distance} F{max_velocity}\nRESTORE_GCODE_STATE NAME=unload_state", 'description': 'G-Code macro', 'variable_unload_distance': '50', 'variable_purge_distance': '25'}, 'tmc2209 stepper_x': {'uart_pin': 'PE6', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_x': {'microsteps': 256, 'step_pin': 'PC14', 'dir_pin': '!PC13', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [], 'enable_pin': '!PC15', 'endstop_pin': 'PA14', 'position_endstop': 250.0, 'position_min': 0.0, 'position_max': 250.0, 'homing_speed': 25.0, 'second_homing_speed': 12.5, 'homing_retract_speed': 25.0, 'homing_retract_dist': 5.0, 'homing_positive_dir': True}, 'tmc2209 stepper_y': {'uart_pin': 'PE3', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_y': {'microsteps': 256, 'step_pin': 'PE5', 'dir_pin': '!PE4', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [], 'enable_pin': '!PC15', 'endstop_pin': 'PA15', 'position_endstop': 250.0, 'position_min': 0.0, 'position_max': 250.0, 'homing_speed': 25.0, 'second_homing_speed': 12.5, 'homing_retract_speed': 25.0, 'homing_retract_dist': 5.0, 'homing_positive_dir': True}, 'tmc2209 stepper_z': {'uart_pin': 'PB7', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_z': {'microsteps': 256, 'step_pin': 'PE1', 'dir_pin': 'PE0', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [[80.0, 16.0]], 'enable_pin': '!PE2', 'endstop_pin': 'probe:z_virtual_endstop', 'position_min': -5.0, 'position_max': 240.0, 'homing_speed': 8.0, 'second_homing_speed': 3.0, 'homing_retract_speed': 8.0, 'homing_retract_dist': 3.0, 'homing_positive_dir': False}, 'tmc2209 stepper_z1': {'uart_pin': 'PB3', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_z1': {'microsteps': 256, 'step_pin': 'PB5', 'dir_pin': '!PB4', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [[80.0, 16.0]], 'enable_pin': '!PB6'}, 'tmc2209 stepper_z2': {'uart_pin': 'PD4', 'uart_address': 0, 'run_current': 0.7, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_z2': {'microsteps': 256, 'step_pin': 'PD6', 'dir_pin': 'PD5', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [[80.0, 16.0]], 'enable_pin': '!PD7'}, 'tmc2209 stepper_z3': {'uart_pin': 'PD0', 'uart_address': 0, 'run_current': 0.87, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'stepper_z3': {'microsteps': 256, 'step_pin': 'PD2', 'dir_pin': '!PD1', 'rotation_distance': 40.0, 'full_steps_per_rotation': 200, 'gear_ratio': [[80.0, 16.0]], 'enable_pin': '!PD3'}, 'tmc2209 extruder': {'uart_pin': 'PD11', 'uart_address': 0, 'run_current': 0.5, 'hold_current': 2.0, 'sense_resistor': 0.11, 'interpolate': False, 'stealthchop_threshold': 0.0, 'driver_multistep_filt': True, 'driver_toff': 3, 'driver_hstrt': 5, 'driver_hend': 0, 'driver_tbl': 2, 'driver_iholddelay': 8, 'driver_pwm_ofs': 36, 'driver_pwm_grad': 14, 'driver_pwm_freq': 1, 'driver_pwm_autoscale': True, 'driver_pwm_autograd': True, 'driver_pwm_reg': 8, 'driver_pwm_lim': 12, 'driver_tpowerdown': 20, 'driver_sgthrs': 0}, 'extruder': {'microsteps': 256, 'sensor_type': 'Generic 3950', 'pullup_resistor': 4700.0, 'inline_resistor': 0.0, 'sensor_pin': 'PC1', 'min_temp': 10.0, 'max_temp': 270.0, 'min_extrude_temp': 170.0, 'max_power': 1.0, 'smooth_time': 1.0, 'control': 'pid', 'pid_kp': 18.026, 'pid_ki': 0.683, 'pid_kd': 118.969, 'heater_pin': 'PB1', 'pwm_cycle_time': 0.1, 'nozzle_diameter': 0.4, 'filament_diameter': 1.75, 'max_extrude_cross_section': 0.6400000000000001, 'max_extrude_only_velocity': 79.82432411074329, 'max_extrude_only_accel': 798.2432411074329, 'max_extrude_only_distance': 50.0, 'instantaneous_corner_velocity': 1.0, 'step_pin': 'PD13', 'pressure_advance': 0.04, 'pressure_advance_smooth_time': 0.04, 'dir_pin': 'PD12', 'rotation_distance': 22.6789511, 'full_steps_per_rotation': 200, 'gear_ratio': [[50.0, 17.0]], 'enable_pin': '!PD14'}, 'heater_bed': {'sensor_type': 'Generic 3950', 'pullup_resistor': 4700.0, 'inline_resistor': 0.0, 'sensor_pin': 'PC0', 'min_temp': 0.0, 'max_temp': 120.0, 'min_extrude_temp': 170.0, 'max_power': 0.6, 'smooth_time': 1.0, 'control': 'pid', 'pid_kp': 40.738, 'pid_ki': 1.181, 'pid_kd': 351.369, 'heater_pin': 'PB10', 'pwm_cycle_time': 0.1}, 'verify_heater heater_bed': {'hysteresis': 5.0, 'max_error': 120.0, 'heating_gain': 2.0, 'check_gain_time': 60.0}, 'probe': {'z_offset': 0.0, 'deactivate_on_each_sample': True, 'activate_gcode': "\n{% set PROBE_TEMP = 150 %}\n{% set MAX_TEMP = PROBE_TEMP + 5 %}\n{% set ACTUAL_TEMP = printer.extruder.temperature %}\n{% set TARGET_TEMP = printer.extruder.target %}\n\n{% if TARGET_TEMP > PROBE_TEMP %}\n{ action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) }\nM109 S{ PROBE_TEMP }\n{% else %}\n\n{% if ACTUAL_TEMP > MAX_TEMP %}\n{ action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) }\nTEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP }\n{% endif %}\n{% endif %}", 'deactivate_gcode': '', 'pin': 'PB12', 'speed': 10.0, 'lift_speed': 10.0, 'x_offset': 0.0, 'y_offset': 0.0, 'samples': 3, 'sample_retract_dist': 3.0, 'samples_result': 'median', 'samples_tolerance': 0.006, 'samples_tolerance_retries': 3}, 'heater_fan hotend_fan': {'heater': ['extruder'], 'heater_temp': 50.0, 'max_power': 1.0, 'kick_start_time': 0.5, 'off_below': 0.0, 'cycle_time': 0.01, 'hardware_pwm': False, 'shutdown_speed': 1.0, 'pin': 'PA2', 'fan_speed': 1.0}, 'fan': {'max_power': 1.0, 'kick_start_time': 0.5, 'off_below': 0.1, 'cycle_time': 0.01, 'hardware_pwm': False, 'shutdown_speed': 0.0, 'pin': 'PA1'}, 'heater_fan controller_fan': {'heater': ['heater_bed'], 'heater_temp': 45.0, 'max_power': 1.0, 'kick_start_time': 0.5, 'off_below': 0.0, 'cycle_time': 0.01, 'hardware_pwm': False, 'shutdown_speed': 1.0, 'pin': 'PB0', 'fan_speed': 1.0}, 'idle_timeout': {'timeout': 1800.0, 'gcode': "\n{% if 'heaters' in printer %}\n   TURN_OFF_HEATERS\n{% endif %}\nM84\n"}, 'safe_z_home': {'home_xy_position': [125.0, 125.0], 'z_hop': 10.0, 'z_hop_speed': 15.0, 'speed': 100.0, 'move_to_previous': False}, 'quad_gantry_level': {'retries': 5, 'retry_tolerance': 0.0075, 'max_adjust': 10.0, 'horizontal_move_z': 10.0, 'points': [[50.0, 25.0], [50.0, 175.0], [200.0, 175.0], [200.0, 25.0]], 'speed': 100.0, 'gantry_corners': [[-60.0, -10.0], [310.0, 320.0]]}, 'board_pins': {'mcu': ['mcu'], 'aliases': [['EXP1_10', '<5V>'], ['EXP1_9', '<GND>'], ['EXP1_8', 'PE7'], ['EXP1_7', 'PE15'], ['EXP1_6', 'PD8'], ['EXP1_5', 'PD9'], ['EXP1_4', 'PD10'], ['EXP1_3', 'PE11'], ['EXP1_2', 'PE10'], ['EXP1_1', 'PB2'], ['EXP2_10', '<5V>'], ['EXP2_9', '<GND>'], ['EXP2_8', '<RST>'], ['EXP2_7', 'PB11'], ['EXP2_6', 'PA7'], ['EXP2_5', 'PE8'], ['EXP2_4', 'PA4'], ['EXP2_3', 'PE9'], ['EXP2_2', 'PA5'], ['EXP2_1', 'PA6']]}, 'verify_heater extruder': {'hysteresis': 5.0, 'max_error': 240.0, 'heating_gain': 2.0, 'check_gain_time': 5000.0}, 'gcode_macro park': {'gcode': '\n{% set th = printer.toolhead %}\nG0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y//2} Z30', 'description': 'G-Code macro'}, 'gcode_macro g32': {'gcode': '\nSAVE_GCODE_STATE NAME=STATE_G32\nG90\nG28\nQUAD_GANTRY_LEVEL\nG28\nPARK\nRESTORE_GCODE_STATE NAME=STATE_G32', 'description': 'G-Code macro'}, 'gcode_macro print_start': {'gcode': '\nG32\nG90\nG1 Z20 F3000', 'description': 'G-Code macro'}, 'gcode_macro print_end': {'gcode': '\n\n{% set th = printer.toolhead %}\n{% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %}\n{% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %}\n{% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %}\n\nSAVE_GCODE_STATE NAME=STATE_PRINT_END\n\nM400\nG92 E0\nG1 E-5.0 F1800\n\nTURN_OFF_HEATERS\n\nG90\nG0 X{x_safe} Y{y_safe} Z{z_safe} F20000\nG0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600\nM107\n\nBED_MESH_CLEAR\n\n\n\n\n\n\nRESTORE_GCODE_STATE NAME=STATE_PRINT_END MOVE=0', 'description': 'G-Code macro'}, 'input_shaper': {'shaper_type': 'mzv', 'shaper_type_x': 'mzv', 'damping_ratio_x': 0.1, 'shaper_freq_x': 43.0, 'shaper_type_y': 'mzv', 'damping_ratio_y': 0.1, 'shaper_freq_y': 43.2}, 'gcode_macro _obico_layer_change': {'gcode': '\n\n{% set pause_macro  = "PAUSE"  if printer.configfile.settings[\'gcode_macro pause\']  is not defined\nelse printer.configfile.settings[\'gcode_macro pause\'].rename_existing %}\n{% set resume_macro = "RESUME" if printer.configfile.settings[\'gcode_macro resume\'] is not defined\nelse printer.configfile.settings[\'gcode_macro resume\'].rename_existing %}\n\n{% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}\n{% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}\n\n{% set polygon_points = printer.exclude_object.objects|map(attribute=\'polygon\')|sum(start=[]) if printer.exclude_object is defined else [] %}\n{% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}\n{% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}\n{% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}\n{% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}\n\n{% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method=\'ceil\')|int %}\n\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Layer %d" % (current_layer)}\' {% endif %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}\n\n{% if first_layer_scan_enabled and current_layer == 2 %}\n\n{% set wait_dic = {\'resume\'              : resume_macro,\n\'absolute_coordinates\': printer.gcode_move.absolute_coordinates,\n\'absolute_extrude\'    : printer.gcode_move.absolute_extrude,\n\'e\'                   : printer.gcode_move.gcode_position.e} %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Prepair scanning" {% endif %}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}\' {% endif %}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}\' {% endif %}\nM83\nG0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}\n{% endif %}\nG91\nG0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Call %s" % pause_macro}\' {% endif %}\n{pause_macro}\n\n\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Start scanning" {% endif %}\n\nUPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True\nG90\nG0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}\n{% for ystep in range(stepoverCount) %}\nG0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}\nG0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}\n{% endfor %}\nSET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False\n{% if verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Finish scanning" {% endif %}\n{% endif %}', 'description': 'Run a scan across the current print area', 'variable_first_layer_scan_retract_length': '6', 'variable_first_layer_scan_retract_speed': '15', 'variable_first_layer_scan_unretract_length': '6.5', 'variable_first_layer_scan_unretract_speed': '15', 'variable_first_layer_scan_resume_speed': '50', 'variable_first_layer_scan_enabled': 'True', 'variable_first_layer_scan_stepover': '10', 'variable_first_layer_scan_speed': '10', 'variable_first_layer_scan_zhop': '4', 'variable_first_layer_scan_zhop_speed': '15', 'variable_verbose': 'False', 'variable_current_layer': '-1', 'variable_first_layer_scanning': 'False', 'variable_wait': '{\'resume\': "RESUME", \'absolute_coordinates\': True, \'absolute_extrude\': True, \'e\': 0.0}'}, 'delayed_gcode _wait_obico_layer_change': {'gcode': '\n{% set lc_macro = printer[\'gcode_macro _OBICO_LAYER_CHANGE\'] %}\n{% if lc_macro.first_layer_scanning %}\n\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Waiting for first layer scan..." {% endif %}\nUPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0\n{% else %}\n\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG="Resume print" {% endif %}\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}\' {% endif %}\n{lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}\nG91\nG0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}\n{% if printer[printer.toolhead.extruder].can_extrude %}\n{% if lc_macro.verbose %} RESPOND PREFIX=\'OBICO DEBUG:\' MSG=\'{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}\' {% endif %}\nM83\nG0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}\n{% endif %}\n\n\n{% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}\n{% if lc_macro.wait.absolute_extrude %}\nM82\nG92 E{lc_macro.wait.e}\n{% endif %}\n{% endif %}', 'initial_duration': 0.0}, 'printer': {'max_velocity': 300.0, 'max_accel': 3000.0, 'max_accel_to_decel': 1500.0, 'square_corner_velocity': 5.0, 'kinematics': 'corexy', 'max_z_velocity': 15.0, 'max_z_accel': 350.0}, 'force_move': {'enable_force_move': False}}, 'warnings': [], 'save_config_pending': False, 'save_config_pending_items': {}}}
2024-02-15 10:54:43,658 [printer.py:stop_tempstore_updates()] - Stopping tempstore
2024-02-15 10:54:43,659 [printer.py:reinit()] - Klipper version: v0.12.0-103-g6ce6fbbc
2024-02-15 10:54:43,659 [printer.py:reinit()] - # Extruders: 1
2024-02-15 10:54:43,659 [printer.py:reinit()] - # Temperature devices: 1
2024-02-15 10:54:43,659 [printer.py:reinit()] - # Fans: 3
2024-02-15 10:54:43,660 [printer.py:reinit()] - # Output pins: 0
2024-02-15 10:54:43,660 [printer.py:reinit()] - # Leds: 1
2024-02-15 10:54:43,678 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/gcode/help
2024-02-15 10:54:43,680 [KlippyWebsocket.py:object_subscription()] - Sending printer.objects.subscribe
2024-02-15 10:54:43,930 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/objects/query?bed_mesh&configfile&display_status&extruder&fan&gcode_move&heater_bed&idle_timeout&pause_resume&print_stats&toolhead&virtual_sdcard&webhooks&motion_report&firmware_retraction&exclude_object&manual_probe&extruder&heater_bed&fan&heater_fan hotend_fan&heater_fan controller_fan&neopixel sb_leds
2024-02-15 10:54:43,935 [files.py:set_gcodes_path()] - Gcodes path: /home/shiqi/printer_data/gcodes
2024-02-15 10:54:43,935 [KlippyWebsocket.py:get_file_list()] - Sending server.files.list
2024-02-15 10:54:43,937 [KlippyWebsocket.py:get_dir_info()] - Sending server.files.get_directory  gcodes
2024-02-15 10:54:43,940 [screen.py:init_klipper()] - Printer initialized
2024-02-15 10:54:43,941 [printer.py:change_state()] - Changing state from 'disconnected' to 'ready'
2024-02-15 10:54:43,941 [printer.py:change_state()] - Adding callback for state: ready
2024-02-15 10:54:43,946 [screen.py:show_panel()] - Reinitializing panel
2024-02-15 10:54:44,020 [main_menu.py:__init__()] - ### Making MainMenu
2024-02-15 10:54:44,029 [main_menu.py:add_device()] - Adding device: extruder
2024-02-15 10:54:44,036 [main_menu.py:add_device()] - Adding device: heater_bed
2024-02-15 10:54:44,063 [screen.py:attach_panel()] - Current panel hierarchy: main_menu
2024-02-15 10:54:44,078 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/temperature_store
2024-02-15 10:54:44,082 [printer.py:init_temp_store()] - Temp store: ['heater_bed', 'extruder']
2024-02-15 10:54:44,092 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/config
2024-02-15 10:54:44,092 [screen.py:init_tempstore()] - Temperature store size: 1200

@alfrix
Copy link
Collaborator

alfrix commented Feb 15, 2024

duplicate of #559 supposedly not happening anymore, i don't think this as bug of klipperscreen, it seems to be a driver issue, it should be reported to mesa

@alfrix alfrix added the wontfix This will not be worked on label Feb 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working wontfix This will not be worked on
Projects
None yet
Development

No branches or pull requests

2 participants