=============== Log rollover at Sat Oct 21 00:14:38 2023 =============== Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-303-g67499853' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper.git CPU: 4 core ? Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' Start printer at Sat Oct 21 00:14:38 2023 (1697868878.3 1753.1) Unable to open config file /home/pi/printer_data/config/printer.cfg Traceback (most recent call last): File "/home/pi/klipper/klippy/configfile.py", line 158, in _read_config_file f = open(filename, 'r') FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg' Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/configfile.py", line 158, in _read_config_file f = open(filename, 'r') FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/pi/klipper/klippy/klippy.py", line 134, in _read_config config = pconfig.read_main_config() File "/home/pi/klipper/klippy/configfile.py", line 279, in read_main_config data = self._read_config_file(filename) File "/home/pi/klipper/klippy/configfile.py", line 164, in _read_config_file raise error(msg) configparser.Error: Unable to open config file /home/pi/printer_data/config/printer.cfg webhooks client 4131690048: New connection webhooks client 4131690048: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} webhooks client 4131690048: Disconnected Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-303-g67499853' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper.git CPU: 4 core ? Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' Start printer at Sat Oct 21 00:28:50 2023 (1697869730.3 21.9) Unable to open config file /home/pi/printer_data/config/printer.cfg Traceback (most recent call last): File "/home/pi/klipper/klippy/configfile.py", line 158, in _read_config_file f = open(filename, 'r') FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg' Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/configfile.py", line 158, in _read_config_file f = open(filename, 'r') FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/pi/klipper/klippy/klippy.py", line 134, in _read_config config = pconfig.read_main_config() File "/home/pi/klipper/klippy/configfile.py", line 279, in read_main_config data = self._read_config_file(filename) File "/home/pi/klipper/klippy/configfile.py", line 164, in _read_config_file raise error(msg) configparser.Error: Unable to open config file /home/pi/printer_data/config/printer.cfg webhooks client 4132860640: New connection webhooks client 4132860640: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} webhooks client 4132860640: Disconnected Restarting printer Start printer at Sat Oct 21 00:29:04 2023 (1697869744.8 36.4) Unable to open config file /home/pi/printer_data/config/printer.cfg Traceback (most recent call last): File "/home/pi/klipper/klippy/configfile.py", line 158, in _read_config_file f = open(filename, 'r') FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg' Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/configfile.py", line 158, in _read_config_file f = open(filename, 'r') FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/printer.cfg' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/pi/klipper/klippy/klippy.py", line 134, in _read_config config = pconfig.read_main_config() File "/home/pi/klipper/klippy/configfile.py", line 279, in read_main_config data = self._read_config_file(filename) File "/home/pi/klipper/klippy/configfile.py", line 164, in _read_config_file raise error(msg) configparser.Error: Unable to open config file /home/pi/printer_data/config/printer.cfg webhooks client 4132863928: New connection webhooks client 4132863928: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} webhooks client 4132863928: Disconnected Restarting printer Start printer at Sat Oct 21 00:33:33 2023 (1697870013.2 263.5) ===== Config file ===== [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/klipper_host_mcu [adxl345] cs_pin = rpi:None [resonance_tester] accel_chip = adxl345 probe_points = 100, 100, 20 [mcu] serial = /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 100 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 100 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = PG10 position_max = 260 position_min = -5 homing_speed = 25 second_homing_speed = 3 homing_retract_dist = 3 position_endstop = 1.203 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [extruder] step_pin = PE2 dir_pin = PE3 enable_pin = !PD4 rotation_distance = 22.6 gear_ratio = 50:10 microsteps = 16 full_steps_per_rotation = 400 nozzle_diameter = 0.6 filament_diameter = 1.75 heater_pin = PA2 sensor_type = Generic 3950 sensor_pin = PF4 min_temp = 10 max_temp = 300 max_power = 1.0 min_extrude_temp = 170 pressure_advance = 0.025 pressure_advance_smooth_time = 0.040 max_extrude_only_distance = 100 control = pid pid_kp = 36.187 pid_ki = 2.622 pid_kd = 124.844 [filament_motion_sensor SFS_T0] detection_length = 10.00 extruder = extruder switch_pin = PG12 pause_on_runout = False event_delay = 3.0 pause_delay = 0.5 runout_gcode = M117 Your Fine! [tmc2209 extruder] uart_pin = PE1 interpolate = false run_current = 0.5 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 39.609 pid_ki = 1.451 pid_kd = 270.331 [probe] pin = ~PG15 x_offset = 0 y_offset = 25.0 speed = 10.0 samples = 3 samples_result = median sample_retract_dist = 3.0 samples_tolerance = 0.006 samples_tolerance_retries = 3 z_offset = 1.200 [fan] pin = PA8 kick_start_time = 0.5 off_below = 0.10 [heater_fan hotend_fan] pin = PE5 max_power = 1.0 kick_start_time = 0.5 heater = extruder heater_temp = 50.0 [controller_fan controller_fan] pin = PD12 kick_start_time = 0.5 heater = heater_bed [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 209.900, 300.000 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} ======================= Extruder max_extrude_ratio=0.598682 mcu 'mcu': Starting serial connect mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4127137504: New connection webhooks client 4127137504: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f446xx_2B0040001750344D30353320-if00' Unable to issue reset command on MCU 'mcu' Unable to issue reset command on MCU 'rpi' webhooks client 4127137504: Disconnected Restarting printer Start printer at Sat Oct 21 00:34:49 2023 (1697870089.3 339.7) ===== Config file ===== [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/klipper_host_mcu [adxl345] cs_pin = rpi:None [resonance_tester] accel_chip = adxl345 probe_points = 100, 100, 20 [mcu] serial = /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 100 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 100 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = PG10 position_max = 260 position_min = -5 homing_speed = 25 second_homing_speed = 3 homing_retract_dist = 3 position_endstop = 1.203 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [extruder] step_pin = PE2 dir_pin = PE3 enable_pin = !PD4 rotation_distance = 22.6 gear_ratio = 50:10 microsteps = 16 full_steps_per_rotation = 400 nozzle_diameter = 0.6 filament_diameter = 1.75 heater_pin = PA2 sensor_type = Generic 3950 sensor_pin = PF4 min_temp = 10 max_temp = 300 max_power = 1.0 min_extrude_temp = 170 pressure_advance = 0.025 pressure_advance_smooth_time = 0.040 max_extrude_only_distance = 100 control = pid pid_kp = 36.187 pid_ki = 2.622 pid_kd = 124.844 [filament_motion_sensor SFS_T0] detection_length = 10.00 extruder = extruder switch_pin = PG12 pause_on_runout = False event_delay = 3.0 pause_delay = 0.5 runout_gcode = M117 Your Fine! [tmc2209 extruder] uart_pin = PE1 interpolate = false run_current = 0.5 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 39.609 pid_ki = 1.451 pid_kd = 270.331 [probe] pin = ~PG15 x_offset = 0 y_offset = 25.0 speed = 10.0 samples = 3 samples_result = median sample_retract_dist = 3.0 samples_tolerance = 0.006 samples_tolerance_retries = 3 z_offset = 1.200 [fan] pin = PA8 kick_start_time = 0.5 off_below = 0.10 [heater_fan hotend_fan] pin = PE5 max_power = 1.0 kick_start_time = 0.5 heater = extruder heater_temp = 50.0 [controller_fan controller_fan] pin = PD12 kick_start_time = 0.5 heater = heater_bed [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 209.900, 300.000 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} ======================= Extruder max_extrude_ratio=0.598682 mcu 'mcu': Starting serial connect webhooks client 4127649120: New connection webhooks client 4127649120: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} mcu 'mcu': Timeout on connect Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-303-g67499853' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper.git CPU: 4 core ? Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' Start printer at Sat Oct 21 00:35:34 2023 (1697870134.7 20.3) ===== Config file ===== [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/klipper_host_mcu [adxl345] cs_pin = rpi:None [resonance_tester] accel_chip = adxl345 probe_points = 100, 100, 20 [mcu] serial = /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 100 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 100 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = PG10 position_max = 260 position_min = -5 homing_speed = 25 second_homing_speed = 3 homing_retract_dist = 3 position_endstop = 1.203 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [extruder] step_pin = PE2 dir_pin = PE3 enable_pin = !PD4 rotation_distance = 22.6 gear_ratio = 50:10 microsteps = 16 full_steps_per_rotation = 400 nozzle_diameter = 0.6 filament_diameter = 1.75 heater_pin = PA2 sensor_type = Generic 3950 sensor_pin = PF4 min_temp = 10 max_temp = 300 max_power = 1.0 min_extrude_temp = 170 pressure_advance = 0.025 pressure_advance_smooth_time = 0.040 max_extrude_only_distance = 100 control = pid pid_kp = 36.187 pid_ki = 2.622 pid_kd = 124.844 [filament_motion_sensor SFS_T0] detection_length = 10.00 extruder = extruder switch_pin = PG12 pause_on_runout = False event_delay = 3.0 pause_delay = 0.5 runout_gcode = M117 Your Fine! [tmc2209 extruder] uart_pin = PE1 interpolate = false run_current = 0.5 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 39.609 pid_ki = 1.451 pid_kd = 270.331 [probe] pin = ~PG15 x_offset = 0 y_offset = 25.0 speed = 10.0 samples = 3 samples_result = median sample_retract_dist = 3.0 samples_tolerance = 0.006 samples_tolerance_retries = 3 z_offset = 1.200 [fan] pin = PA8 kick_start_time = 0.5 off_below = 0.10 [heater_fan hotend_fan] pin = PE5 max_power = 1.0 kick_start_time = 0.5 heater = extruder heater_temp = 50.0 [controller_fan controller_fan] pin = PD12 kick_start_time = 0.5 heater = heater_bed [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 209.900, 300.000 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} ======================= Extruder max_extrude_ratio=0.598682 mcu 'mcu': Starting serial connect mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4130559672: New connection webhooks client 4130559672: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' MCU error during connect Traceback (most recent call last): File "/home/pi/klipper/klippy/mcu.py", line 800, in _mcu_identify self._serial.connect_uart(self._serialport, self._baud, rts) File "/home/pi/klipper/klippy/serialhdl.py", line 182, in connect_uart self._error("Unable to connect") File "/home/pi/klipper/klippy/serialhdl.py", line 61, in _error raise error(self.warn_prefix + (msg % params)) serialhdl.error: mcu 'mcu': Unable to connect During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 176, in _connect self.send_event("klippy:mcu_identify") File "/home/pi/klipper/klippy/klippy.py", line 263, in send_event return [cb(*params) for cb in self.event_handlers.get(event, [])] File "/home/pi/klipper/klippy/klippy.py", line 263, in return [cb(*params) for cb in self.event_handlers.get(event, [])] File "/home/pi/klipper/klippy/mcu.py", line 805, in _mcu_identify raise error(str(e)) mcu.error: mcu 'mcu': Unable to connect Build file /home/pi/klipper/klippy/../.config(3376): Fri Oct 20 23:55:11 2023 ========= Last MCU build config ========= CONFIG_LOW_LEVEL_OPTIONS=y # CONFIG_MACH_AVR is not set # CONFIG_MACH_ATSAM is not set # CONFIG_MACH_ATSAMD is not set # CONFIG_MACH_LPC176X is not set CONFIG_MACH_STM32=y # CONFIG_MACH_HC32F460 is not set # CONFIG_MACH_RP2040 is not set # CONFIG_MACH_PRU is not set # CONFIG_MACH_AR100 is not set # CONFIG_MACH_LINUX is not set # CONFIG_MACH_SIMU is not set CONFIG_BOARD_DIRECTORY="stm32" CONFIG_MCU="stm32f446xx" CONFIG_CLOCK_FREQ=180000000 CONFIG_USBSERIAL=y CONFIG_FLASH_SIZE=0x80000 CONFIG_FLASH_BOOT_ADDRESS=0x8000000 CONFIG_RAM_START=0x20000000 CONFIG_RAM_SIZE=0x20000 CONFIG_STACK_SIZE=512 CONFIG_FLASH_APPLICATION_ADDRESS=0x8008000 CONFIG_STM32_SELECT=y # CONFIG_MACH_STM32F103 is not set # CONFIG_MACH_STM32F207 is not set # CONFIG_MACH_STM32F401 is not set # CONFIG_MACH_STM32F405 is not set # CONFIG_MACH_STM32F407 is not set # CONFIG_MACH_STM32F429 is not set CONFIG_MACH_STM32F446=y # CONFIG_MACH_STM32F765 is not set # CONFIG_MACH_STM32F031 is not set # CONFIG_MACH_STM32F042 is not set # CONFIG_MACH_STM32F070 is not set # CONFIG_MACH_STM32F072 is not set # CONFIG_MACH_STM32G070 is not set # CONFIG_MACH_STM32G071 is not set # CONFIG_MACH_STM32G0B0 is not set # CONFIG_MACH_STM32G0B1 is not set # CONFIG_MACH_STM32G431 is not set # CONFIG_MACH_STM32H723 is not set # CONFIG_MACH_STM32H743 is not set # CONFIG_MACH_STM32H750 is not set # CONFIG_MACH_STM32L412 is not set # CONFIG_MACH_N32G452 is not set # CONFIG_MACH_N32G455 is not set CONFIG_MACH_STM32F4=y CONFIG_HAVE_STM32_USBOTG=y CONFIG_HAVE_STM32_CANBUS=y CONFIG_HAVE_STM32_USBCANBUS=y CONFIG_STM32_DFU_ROM_ADDRESS=0x1fff0000 CONFIG_STM32_FLASH_START_8000=y # CONFIG_STM32_FLASH_START_10000 is not set # CONFIG_STM32_FLASH_START_0000 is not set # CONFIG_STM32_CLOCK_REF_8M is not set CONFIG_STM32_CLOCK_REF_12M=y # CONFIG_STM32_CLOCK_REF_16M is not set # CONFIG_STM32_CLOCK_REF_20M is not set # CONFIG_STM32_CLOCK_REF_24M is not set # CONFIG_STM32_CLOCK_REF_25M is not set # CONFIG_STM32_CLOCK_REF_INTERNAL is not set CONFIG_CLOCK_REF_FREQ=12000000 CONFIG_STM32F0_TRIM=16 CONFIG_STM32_USB_PA11_PA12=y # CONFIG_STM32_SERIAL_USART1 is not set # CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set # CONFIG_STM32_SERIAL_USART2 is not set # CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set # CONFIG_STM32_SERIAL_USART3 is not set # CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set # CONFIG_STM32_CANBUS_PA11_PA12 is not set # CONFIG_STM32_CANBUS_PA11_PB9 is not set # CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set # CONFIG_STM32_MMENU_CANBUS_PI9_PH13 is not set # CONFIG_STM32_MMENU_CANBUS_PB5_PB6 is not set # CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set # CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set # CONFIG_STM32_USBCANBUS_PA11_PA12 is not set CONFIG_USB=y CONFIG_USB_VENDOR_ID=0x1d50 CONFIG_USB_DEVICE_ID=0x614e CONFIG_USB_SERIAL_NUMBER_CHIPID=y CONFIG_USB_SERIAL_NUMBER="12345" # # USB ids # # end of USB ids CONFIG_WANT_GPIO_BITBANGING=y CONFIG_WANT_DISPLAYS=y CONFIG_WANT_SENSORS=y CONFIG_WANT_LIS2DW=y CONFIG_WANT_SOFTWARE_I2C=y CONFIG_WANT_SOFTWARE_SPI=y CONFIG_CANBUS_FREQUENCY=1000000 CONFIG_INITIAL_PINS="" CONFIG_HAVE_GPIO=y CONFIG_HAVE_GPIO_ADC=y CONFIG_HAVE_GPIO_SPI=y CONFIG_HAVE_GPIO_SDIO=y CONFIG_HAVE_GPIO_I2C=y CONFIG_HAVE_GPIO_HARD_PWM=y CONFIG_HAVE_STRICT_TIMING=y CONFIG_HAVE_CHIPID=y CONFIG_HAVE_STEPPER_BOTH_EDGE=y CONFIG_HAVE_BOOTLOADER_REQUEST=y CONFIG_INLINE_STEPPER_HACK=y ======================= Build file /home/pi/klipper/klippy/../out/klipper.dict(8787): Sat Oct 21 00:16:15 2023 Last MCU build version: v0.11.0-303-g67499853 Last MCU build tools: gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34 Last MCU build config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 Build file /home/pi/klipper/klippy/../out/klipper.elf(1295708): Sat Oct 21 00:16:23 2023 Unable to issue reset command on MCU 'mcu' Unable to issue reset command on MCU 'rpi' webhooks client 4130559672: Disconnected Restarting printer Start printer at Sat Oct 21 00:38:36 2023 (1697870316.9 186.2) Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/pi/klipper/klippy/klippy.py", line 134, in _read_config config = pconfig.read_main_config() File "/home/pi/klipper/klippy/configfile.py", line 281, in read_main_config regular_config = self._build_config_wrapper(regular_data, filename) File "/home/pi/klipper/klippy/configfile.py", line 268, in _build_config_wrapper self._parse_config(data, filename, fileconfig, set()) File "/home/pi/klipper/klippy/configfile.py", line 256, in _parse_config self._resolve_include(filename, include_spec, fileconfig, File "/home/pi/klipper/klippy/configfile.py", line 229, in _resolve_include raise error("Include file '%s' does not exist" % (include_glob,)) configparser.Error: Include file '/home/pi/printer_data/config/stealthburner_leds.cfg' does not exist webhooks client 4142857664: New connection webhooks client 4142857664: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} webhooks client 4142857664: Disconnected Restarting printer Start printer at Sat Oct 21 00:40:03 2023 (1697870403.9 273.2) Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/pi/klipper/klippy/klippy.py", line 134, in _read_config config = pconfig.read_main_config() File "/home/pi/klipper/klippy/configfile.py", line 281, in read_main_config regular_config = self._build_config_wrapper(regular_data, filename) File "/home/pi/klipper/klippy/configfile.py", line 268, in _build_config_wrapper self._parse_config(data, filename, fileconfig, set()) File "/home/pi/klipper/klippy/configfile.py", line 256, in _parse_config self._resolve_include(filename, include_spec, fileconfig, File "/home/pi/klipper/klippy/configfile.py", line 229, in _resolve_include raise error("Include file '%s' does not exist" % (include_glob,)) configparser.Error: Include file '/home/pi/printer_data/config/btt_ebb-sb2240.cfg' does not exist webhooks client 4125939360: New connection webhooks client 4125939360: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} webhooks client 4125939360: Disconnected Restarting printer Start printer at Sat Oct 21 00:41:13 2023 (1697870473.9 343.2) ===== Config file ===== [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/klipper_host_mcu [mcu] serial = /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = probe:z_virtual_endstop position_max = 260 position_min = -5 homing_speed = 8 second_homing_speed = 3 homing_retract_dist = 3 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 58.437 pid_ki = 2.347 pid_kd = 363.769 [probe] 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 = {% set PROBE_TEMP = 150 %} {% set MAX_TEMP = PROBE_TEMP + 5 %} {% set ACTUAL_TEMP = printer.extruder.temperature %} {% set TARGET_TEMP = printer.extruder.target %} {% if TARGET_TEMP > PROBE_TEMP %} { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } M109 S{ PROBE_TEMP } {% else %} {% if ACTUAL_TEMP > MAX_TEMP %} { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } {% endif %} {% endif %} [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 150, 150 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} [extruder] control = pid pid_kp = 36.187 pid_ki = 2.622 pid_kd = 124.844 ======================= Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/pi/klipper/klippy/klippy.py", line 141, in _read_config self.load_object(config, section_config.get_name(), None) File "/home/pi/klipper/klippy/klippy.py", line 130, in load_object self.objects[section] = init_func(config.getsection(section)) File "/home/pi/klipper/klippy/extras/probe.py", line 458, in load_config return PrinterProbe(config, ProbeEndstopWrapper(config)) File "/home/pi/klipper/klippy/extras/probe.py", line 308, in __init__ pin = config.get('pin') File "/home/pi/klipper/klippy/configfile.py", line 57, in get return self._get_wrapper(self.fileconfig.get, option, default, File "/home/pi/klipper/klippy/configfile.py", line 32, in _get_wrapper raise error("Option '%s' in section '%s' must be specified" configparser.Error: Option 'pin' in section 'probe' must be specified webhooks client 4126499384: New connection webhooks client 4126499384: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} webhooks client 4126499384: Disconnected Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-303-g67499853' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper.git CPU: 4 core ? Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' Start printer at Sat Oct 21 00:41:54 2023 (1697870514.0 20.6) ===== Config file ===== [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/klipper_host_mcu [mcu] serial = /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = probe:z_virtual_endstop position_max = 260 position_min = -5 homing_speed = 8 second_homing_speed = 3 homing_retract_dist = 3 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 58.437 pid_ki = 2.347 pid_kd = 363.769 [probe] 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 = {% set PROBE_TEMP = 150 %} {% set MAX_TEMP = PROBE_TEMP + 5 %} {% set ACTUAL_TEMP = printer.extruder.temperature %} {% set TARGET_TEMP = printer.extruder.target %} {% if TARGET_TEMP > PROBE_TEMP %} { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } M109 S{ PROBE_TEMP } {% else %} {% if ACTUAL_TEMP > MAX_TEMP %} { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } {% endif %} {% endif %} [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 150, 150 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} [extruder] control = pid pid_kp = 36.187 pid_ki = 2.622 pid_kd = 124.844 ======================= Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/pi/klipper/klippy/klippy.py", line 141, in _read_config self.load_object(config, section_config.get_name(), None) File "/home/pi/klipper/klippy/klippy.py", line 130, in load_object self.objects[section] = init_func(config.getsection(section)) File "/home/pi/klipper/klippy/extras/probe.py", line 458, in load_config return PrinterProbe(config, ProbeEndstopWrapper(config)) File "/home/pi/klipper/klippy/extras/probe.py", line 308, in __init__ pin = config.get('pin') File "/home/pi/klipper/klippy/configfile.py", line 57, in get return self._get_wrapper(self.fileconfig.get, option, default, File "/home/pi/klipper/klippy/configfile.py", line 32, in _get_wrapper raise error("Option '%s' in section '%s' must be specified" configparser.Error: Option 'pin' in section 'probe' must be specified webhooks client 4123990528: New connection webhooks client 4123990528: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} Unable to issue reset command on MCU 'mcu' Unable to issue reset command on MCU 'rpi' webhooks client 4123990528: Disconnected Restarting printer Start printer at Sat Oct 21 00:43:19 2023 (1697870599.3 90.2) ===== Config file ===== [mcu EBBCan] canbus_uuid = 73d675ea94f6 [temperature_sensor EBB_NTC] sensor_type = Generic 3950 sensor_pin = EBBCan: PA2 [adxl345] cs_pin = EBBCan: PB12 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 axes_map = z,-y,x [resonance_tester] probe_points = 100, 100, 20 accel_chip = adxl345 [extruder] step_pin = EBBCan: PD0 dir_pin = !EBBCan: PD1 enable_pin = !EBBCan: PD2 microsteps = 16 rotation_distance = 33.500 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = EBBCan: PB13 sensor_type = EPCOS 100K B57560G104F sensor_pin = EBBCan: PA3 control = pid pid_kp = 21.527 pid_ki = 1.063 pid_kd = 108.982 min_temp = 0 max_temp = 250 [tmc2240 extruder] cs_pin = EBBCan: PA15 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 driver_tpfd = 0 run_current = 0.650 stealthchop_threshold = 999999 [fan] pin = EBBCan: PA1 [heater_fan hotend_fan] pin = EBBCan: PA0 heater = extruder heater_temp = 50.0 [probe] pin = ^EBBCan: PC13 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 = {% set PROBE_TEMP = 150 %} {% set MAX_TEMP = PROBE_TEMP + 5 %} {% set ACTUAL_TEMP = printer.extruder.temperature %} {% set TARGET_TEMP = printer.extruder.target %} {% if TARGET_TEMP > PROBE_TEMP %} { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } M109 S{ PROBE_TEMP } {% else %} {% if ACTUAL_TEMP > MAX_TEMP %} { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } {% endif %} {% endif %} [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/klipper_host_mcu [mcu] serial = /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = probe:z_virtual_endstop position_max = 260 position_min = -5 homing_speed = 8 second_homing_speed = 3 homing_retract_dist = 3 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 58.437 pid_ki = 2.347 pid_kd = 363.769 [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 150, 150 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4122831384: New connection webhooks client 4122831384: Client info {'program': 'Moonraker', 'version': 'v0.8.0-41-g348b7f5'} mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4122831384: Disconnected mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4124140208: New connection webhooks client 4124140208: Client info {'program': 'Moonraker', 'version': 'v0.8.0-186-g2641fc5'} mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4124140208: Disconnected Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-303-g67499853' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper.git CPU: 4 core ? Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' Start printer at Sat Oct 21 00:44:25 2023 (1697870665.5 20.1) ===== Config file ===== [mcu EBBCan] canbus_uuid = 73d675ea94f6 [temperature_sensor EBB_NTC] sensor_type = Generic 3950 sensor_pin = EBBCan: PA2 [adxl345] cs_pin = EBBCan: PB12 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 axes_map = z,-y,x [resonance_tester] probe_points = 100, 100, 20 accel_chip = adxl345 [extruder] step_pin = EBBCan: PD0 dir_pin = !EBBCan: PD1 enable_pin = !EBBCan: PD2 microsteps = 16 rotation_distance = 33.500 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = EBBCan: PB13 sensor_type = EPCOS 100K B57560G104F sensor_pin = EBBCan: PA3 control = pid pid_kp = 21.527 pid_ki = 1.063 pid_kd = 108.982 min_temp = 0 max_temp = 250 [tmc2240 extruder] cs_pin = EBBCan: PA15 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 driver_tpfd = 0 run_current = 0.650 stealthchop_threshold = 999999 [fan] pin = EBBCan: PA1 [heater_fan hotend_fan] pin = EBBCan: PA0 heater = extruder heater_temp = 50.0 [probe] pin = ^EBBCan: PC13 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 = {% set PROBE_TEMP = 150 %} {% set MAX_TEMP = PROBE_TEMP + 5 %} {% set ACTUAL_TEMP = printer.extruder.temperature %} {% set TARGET_TEMP = printer.extruder.target %} {% if TARGET_TEMP > PROBE_TEMP %} { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } M109 S{ PROBE_TEMP } {% else %} {% if ACTUAL_TEMP > MAX_TEMP %} { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } {% endif %} {% endif %} [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/klipper_host_mcu [mcu] serial = /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = probe:z_virtual_endstop position_max = 260 position_min = -5 homing_speed = 8 second_homing_speed = 3 homing_retract_dist = 3 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 58.437 pid_ki = 2.347 pid_kd = 363.769 [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 150, 150 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4123215256: New connection webhooks client 4123215256: Client info {'program': 'Moonraker', 'version': 'v0.8.0-186-g2641fc5'} mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' Unable to issue reset command on MCU 'mcu' Unable to issue reset command on MCU 'EBBCan' Unable to issue reset command on MCU 'rpi' webhooks client 4123215256: Disconnected Restarting printer Start printer at Sat Oct 21 00:45:48 2023 (1697870748.1 86.7) ===== Config file ===== [mcu EBBCan] canbus_uuid = 73d675ea94f6 [temperature_sensor EBB_NTC] sensor_type = Generic 3950 sensor_pin = EBBCan: PA2 [adxl345] cs_pin = EBBCan: PB12 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 axes_map = z,-y,x [resonance_tester] probe_points = 100, 100, 20 accel_chip = adxl345 [extruder] step_pin = EBBCan: PD0 dir_pin = !EBBCan: PD1 enable_pin = !EBBCan: PD2 microsteps = 16 rotation_distance = 33.500 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = EBBCan: PB13 sensor_type = EPCOS 100K B57560G104F sensor_pin = EBBCan: PA3 control = pid pid_kp = 21.527 pid_ki = 1.063 pid_kd = 108.982 min_temp = 0 max_temp = 250 [tmc2240 extruder] cs_pin = EBBCan: PA15 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 driver_tpfd = 0 run_current = 0.650 stealthchop_threshold = 999999 [fan] pin = EBBCan: PA1 [heater_fan hotend_fan] pin = EBBCan: PA0 heater = extruder heater_temp = 50.0 [probe] pin = ^EBBCan: PC13 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 = {% set PROBE_TEMP = 150 %} {% set MAX_TEMP = PROBE_TEMP + 5 %} {% set ACTUAL_TEMP = printer.extruder.temperature %} {% set TARGET_TEMP = printer.extruder.target %} {% if TARGET_TEMP > PROBE_TEMP %} { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } M109 S{ PROBE_TEMP } {% else %} {% if ACTUAL_TEMP > MAX_TEMP %} { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } {% endif %} {% endif %} [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/katapult_host_mcu [mcu] serial = /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = probe:z_virtual_endstop position_max = 260 position_min = -5 homing_speed = 8 second_homing_speed = 3 homing_retract_dist = 3 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 58.437 pid_ki = 2.347 pid_kd = 363.769 [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 150, 150 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4123277392: New connection webhooks client 4123277392: Client info {'program': 'Moonraker', 'version': 'v0.8.0-186-g2641fc5'} mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' Unable to issue reset command on MCU 'mcu' Unable to issue reset command on MCU 'EBBCan' Attempting MCU 'rpi' reset Unhandled exception during post run Traceback (most recent call last): File "/home/pi/klippy-env/lib/python3.9/site-packages/serial/serialposix.py", line 265, in open self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK) FileNotFoundError: [Errno 2] No such file or directory: '/tmp/katapult_host_mcu' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 234, in run self.send_event("klippy:firmware_restart") File "/home/pi/klipper/klippy/klippy.py", line 263, in send_event return [cb(*params) for cb in self.event_handlers.get(event, [])] File "/home/pi/klipper/klippy/klippy.py", line 263, in return [cb(*params) for cb in self.event_handlers.get(event, [])] File "/home/pi/klipper/klippy/mcu.py", line 951, in _firmware_restart self._restart_arduino() File "/home/pi/klipper/klippy/mcu.py", line 911, in _restart_arduino serialhdl.arduino_reset(self._serialport, self._reactor) File "/home/pi/klipper/klippy/serialhdl.py", line 379, in arduino_reset ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True) File "/home/pi/klippy-env/lib/python3.9/site-packages/serial/serialutil.py", line 240, in __init__ self.open() File "/home/pi/klippy-env/lib/python3.9/site-packages/serial/serialposix.py", line 268, in open raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg)) serial.serialutil.SerialException: [Errno 2] could not open port /tmp/katapult_host_mcu: [Errno 2] No such file or directory: '/tmp/katapult_host_mcu' Restarting printer Start printer at Sat Oct 21 00:46:43 2023 (1697870803.5 142.1) ===== Config file ===== [mcu EBBCan] canbus_uuid = 73d675ea94f6 [temperature_sensor EBB_NTC] sensor_type = Generic 3950 sensor_pin = EBBCan: PA2 [adxl345] cs_pin = EBBCan: PB12 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 axes_map = z,-y,x [resonance_tester] probe_points = 100, 100, 20 accel_chip = adxl345 [extruder] step_pin = EBBCan: PD0 dir_pin = !EBBCan: PD1 enable_pin = !EBBCan: PD2 microsteps = 16 rotation_distance = 33.500 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = EBBCan: PB13 sensor_type = EPCOS 100K B57560G104F sensor_pin = EBBCan: PA3 control = pid pid_kp = 21.527 pid_ki = 1.063 pid_kd = 108.982 min_temp = 0 max_temp = 250 [tmc2240 extruder] cs_pin = EBBCan: PA15 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 driver_tpfd = 0 run_current = 0.650 stealthchop_threshold = 999999 [fan] pin = EBBCan: PA1 [heater_fan hotend_fan] pin = EBBCan: PA0 heater = extruder heater_temp = 50.0 [probe] pin = ^EBBCan: PC13 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 = {% set PROBE_TEMP = 150 %} {% set MAX_TEMP = PROBE_TEMP + 5 %} {% set ACTUAL_TEMP = printer.extruder.temperature %} {% set TARGET_TEMP = printer.extruder.target %} {% if TARGET_TEMP > PROBE_TEMP %} { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } M109 S{ PROBE_TEMP } {% else %} {% if ACTUAL_TEMP > MAX_TEMP %} { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } {% endif %} {% endif %} [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/katapult_host_mcu [mcu] serial = /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = probe:z_virtual_endstop position_max = 260 position_min = -5 homing_speed = 8 second_homing_speed = 3 homing_retract_dist = 3 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 58.437 pid_ki = 2.347 pid_kd = 363.769 [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 150, 150 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4123278808: New connection webhooks client 4123278808: Client info {'program': 'Moonraker', 'version': 'v0.8.0-186-g2641fc5'} mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' MCU error during connect Traceback (most recent call last): File "/home/pi/klipper/klippy/mcu.py", line 800, in _mcu_identify self._serial.connect_uart(self._serialport, self._baud, rts) File "/home/pi/klipper/klippy/serialhdl.py", line 182, in connect_uart self._error("Unable to connect") File "/home/pi/klipper/klippy/serialhdl.py", line 61, in _error raise error(self.warn_prefix + (msg % params)) serialhdl.error: mcu 'mcu': Unable to connect During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 176, in _connect self.send_event("klippy:mcu_identify") File "/home/pi/klipper/klippy/klippy.py", line 263, in send_event return [cb(*params) for cb in self.event_handlers.get(event, [])] File "/home/pi/klipper/klippy/klippy.py", line 263, in return [cb(*params) for cb in self.event_handlers.get(event, [])] File "/home/pi/klipper/klippy/mcu.py", line 805, in _mcu_identify raise error(str(e)) mcu.error: mcu 'mcu': Unable to connect Build file /home/pi/klipper/klippy/../.config(3376): Fri Oct 20 23:55:11 2023 ========= Last MCU build config ========= CONFIG_LOW_LEVEL_OPTIONS=y # CONFIG_MACH_AVR is not set # CONFIG_MACH_ATSAM is not set # CONFIG_MACH_ATSAMD is not set # CONFIG_MACH_LPC176X is not set CONFIG_MACH_STM32=y # CONFIG_MACH_HC32F460 is not set # CONFIG_MACH_RP2040 is not set # CONFIG_MACH_PRU is not set # CONFIG_MACH_AR100 is not set # CONFIG_MACH_LINUX is not set # CONFIG_MACH_SIMU is not set CONFIG_BOARD_DIRECTORY="stm32" CONFIG_MCU="stm32f446xx" CONFIG_CLOCK_FREQ=180000000 CONFIG_USBSERIAL=y CONFIG_FLASH_SIZE=0x80000 CONFIG_FLASH_BOOT_ADDRESS=0x8000000 CONFIG_RAM_START=0x20000000 CONFIG_RAM_SIZE=0x20000 CONFIG_STACK_SIZE=512 CONFIG_FLASH_APPLICATION_ADDRESS=0x8008000 CONFIG_STM32_SELECT=y # CONFIG_MACH_STM32F103 is not set # CONFIG_MACH_STM32F207 is not set # CONFIG_MACH_STM32F401 is not set # CONFIG_MACH_STM32F405 is not set # CONFIG_MACH_STM32F407 is not set # CONFIG_MACH_STM32F429 is not set CONFIG_MACH_STM32F446=y # CONFIG_MACH_STM32F765 is not set # CONFIG_MACH_STM32F031 is not set # CONFIG_MACH_STM32F042 is not set # CONFIG_MACH_STM32F070 is not set # CONFIG_MACH_STM32F072 is not set # CONFIG_MACH_STM32G070 is not set # CONFIG_MACH_STM32G071 is not set # CONFIG_MACH_STM32G0B0 is not set # CONFIG_MACH_STM32G0B1 is not set # CONFIG_MACH_STM32G431 is not set # CONFIG_MACH_STM32H723 is not set # CONFIG_MACH_STM32H743 is not set # CONFIG_MACH_STM32H750 is not set # CONFIG_MACH_STM32L412 is not set # CONFIG_MACH_N32G452 is not set # CONFIG_MACH_N32G455 is not set CONFIG_MACH_STM32F4=y CONFIG_HAVE_STM32_USBOTG=y CONFIG_HAVE_STM32_CANBUS=y CONFIG_HAVE_STM32_USBCANBUS=y CONFIG_STM32_DFU_ROM_ADDRESS=0x1fff0000 CONFIG_STM32_FLASH_START_8000=y # CONFIG_STM32_FLASH_START_10000 is not set # CONFIG_STM32_FLASH_START_0000 is not set # CONFIG_STM32_CLOCK_REF_8M is not set CONFIG_STM32_CLOCK_REF_12M=y # CONFIG_STM32_CLOCK_REF_16M is not set # CONFIG_STM32_CLOCK_REF_20M is not set # CONFIG_STM32_CLOCK_REF_24M is not set # CONFIG_STM32_CLOCK_REF_25M is not set # CONFIG_STM32_CLOCK_REF_INTERNAL is not set CONFIG_CLOCK_REF_FREQ=12000000 CONFIG_STM32F0_TRIM=16 CONFIG_STM32_USB_PA11_PA12=y # CONFIG_STM32_SERIAL_USART1 is not set # CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set # CONFIG_STM32_SERIAL_USART2 is not set # CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set # CONFIG_STM32_SERIAL_USART3 is not set # CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set # CONFIG_STM32_CANBUS_PA11_PA12 is not set # CONFIG_STM32_CANBUS_PA11_PB9 is not set # CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set # CONFIG_STM32_MMENU_CANBUS_PI9_PH13 is not set # CONFIG_STM32_MMENU_CANBUS_PB5_PB6 is not set # CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set # CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set # CONFIG_STM32_USBCANBUS_PA11_PA12 is not set CONFIG_USB=y CONFIG_USB_VENDOR_ID=0x1d50 CONFIG_USB_DEVICE_ID=0x614e CONFIG_USB_SERIAL_NUMBER_CHIPID=y CONFIG_USB_SERIAL_NUMBER="12345" # # USB ids # # end of USB ids CONFIG_WANT_GPIO_BITBANGING=y CONFIG_WANT_DISPLAYS=y CONFIG_WANT_SENSORS=y CONFIG_WANT_LIS2DW=y CONFIG_WANT_SOFTWARE_I2C=y CONFIG_WANT_SOFTWARE_SPI=y CONFIG_CANBUS_FREQUENCY=1000000 CONFIG_INITIAL_PINS="" CONFIG_HAVE_GPIO=y CONFIG_HAVE_GPIO_ADC=y CONFIG_HAVE_GPIO_SPI=y CONFIG_HAVE_GPIO_SDIO=y CONFIG_HAVE_GPIO_I2C=y CONFIG_HAVE_GPIO_HARD_PWM=y CONFIG_HAVE_STRICT_TIMING=y CONFIG_HAVE_CHIPID=y CONFIG_HAVE_STEPPER_BOTH_EDGE=y CONFIG_HAVE_BOOTLOADER_REQUEST=y CONFIG_INLINE_STEPPER_HACK=y ======================= Build file /home/pi/klipper/klippy/../out/klipper.dict(8787): Sat Oct 21 00:16:15 2023 Last MCU build version: v0.11.0-303-g67499853 Last MCU build tools: gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34 Last MCU build config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 Build file /home/pi/klipper/klippy/../out/klipper.elf(1295708): Sat Oct 21 00:16:23 2023 Unable to issue reset command on MCU 'mcu' Unable to issue reset command on MCU 'EBBCan' Attempting MCU 'rpi' reset Unhandled exception during post run Traceback (most recent call last): File "/home/pi/klippy-env/lib/python3.9/site-packages/serial/serialposix.py", line 265, in open self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK) FileNotFoundError: [Errno 2] No such file or directory: '/tmp/katapult_host_mcu' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 234, in run self.send_event("klippy:firmware_restart") File "/home/pi/klipper/klippy/klippy.py", line 263, in send_event return [cb(*params) for cb in self.event_handlers.get(event, [])] File "/home/pi/klipper/klippy/klippy.py", line 263, in return [cb(*params) for cb in self.event_handlers.get(event, [])] File "/home/pi/klipper/klippy/mcu.py", line 951, in _firmware_restart self._restart_arduino() File "/home/pi/klipper/klippy/mcu.py", line 911, in _restart_arduino serialhdl.arduino_reset(self._serialport, self._reactor) File "/home/pi/klipper/klippy/serialhdl.py", line 379, in arduino_reset ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True) File "/home/pi/klippy-env/lib/python3.9/site-packages/serial/serialutil.py", line 240, in __init__ self.open() File "/home/pi/klippy-env/lib/python3.9/site-packages/serial/serialposix.py", line 268, in open raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg)) serial.serialutil.SerialException: [Errno 2] could not open port /tmp/katapult_host_mcu: [Errno 2] No such file or directory: '/tmp/katapult_host_mcu' Restarting printer Start printer at Sat Oct 21 00:50:47 2023 (1697871047.5 386.1) ===== Config file ===== [mcu EBBCan] canbus_uuid = 73d675ea94f6 [temperature_sensor EBB_NTC] sensor_type = Generic 3950 sensor_pin = EBBCan: PA2 [adxl345] cs_pin = EBBCan: PB12 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 axes_map = z,-y,x [resonance_tester] probe_points = 100, 100, 20 accel_chip = adxl345 [extruder] step_pin = EBBCan: PD0 dir_pin = !EBBCan: PD1 enable_pin = !EBBCan: PD2 microsteps = 16 rotation_distance = 33.500 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = EBBCan: PB13 sensor_type = EPCOS 100K B57560G104F sensor_pin = EBBCan: PA3 control = pid pid_kp = 21.527 pid_ki = 1.063 pid_kd = 108.982 min_temp = 0 max_temp = 250 [tmc2240 extruder] cs_pin = EBBCan: PA15 spi_software_sclk_pin = EBBCan: PB10 spi_software_mosi_pin = EBBCan: PB11 spi_software_miso_pin = EBBCan: PB2 driver_tpfd = 0 run_current = 0.650 stealthchop_threshold = 999999 [fan] pin = EBBCan: PA1 [heater_fan hotend_fan] pin = EBBCan: PA0 heater = extruder heater_temp = 50.0 [probe] pin = ^EBBCan: PC13 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 = {% set PROBE_TEMP = 150 %} {% set MAX_TEMP = PROBE_TEMP + 5 %} {% set ACTUAL_TEMP = printer.extruder.temperature %} {% set TARGET_TEMP = printer.extruder.target %} {% if TARGET_TEMP > PROBE_TEMP %} { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) } M109 S{ PROBE_TEMP } {% else %} {% if ACTUAL_TEMP > MAX_TEMP %} { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP } {% endif %} {% endif %} [virtual_sdcard] path = ~/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set allow_park = False if not macro_found else False if client.park_at_cancel is not defined else True if client.park_at_cancel|lower == 'true' else False %} {% set retract = 5.0 if not macro_found else client.cancel_retract|default(5.0)|abs %} {% set park_x = "" if not macro_found else "" if client.park_at_cancel_x is not defined else "X=" + client.park_at_cancel_x|string if client.park_at_cancel_x is not none %} {% set park_y = "" if not macro_found else "" if client.park_at_cancel_y is not defined else "Y=" + client.park_at_cancel_y|string if client.park_at_cancel_y is not none %} {% set custom_park = True if (park_x|length > 0 or park_y|length > 0) else False %} {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} _CLIENT_RETRACT LENGTH={retract} TURN_OFF_HEATERS M106 S0 SET_PAUSE_NEXT_LAYER ENABLE=0 SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE gcode = SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{printer[printer.toolhead.extruder].target}" PAUSE_BASE _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = 0 gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set sp_move = velocity if not macro_found else client.speed_move|default(velocity) %} M109 S{last_extruder_temp} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE | default(1) | int != 0 %} {% set MACRO = params.MACRO | default(pause_next_layer.call, True) %} SET_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 = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE | int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER | default(pause_at_layer.layer) | int %} {% set MACRO = params.MACRO | default(pause_at_layer.call, True) %} SET_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 = {% if pause_next_layer.enable %} {action_respond_info("%s, forced by pause_next_layer" % pause_next_layer.call)} {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} {action_respond_info("%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer))} {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = False if not macro_found else False if client.use_custom_pos is not defined else True if client.use_custom_pos|lower == 'true' else False %} {% set custom_park_x = 0.0 if not macro_found else client.custom_park_x|default(0.0) %} {% set custom_park_y = 0.0 if not macro_found else client.custom_park_y|default(0.0) %} {% set park_dz = 2.0 if not macro_found else client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = 900 if not macro_found else client.speed_hop|default(15) * 60 %} {% set sp_move = velocity * 60 if not macro_found else client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set use_fw_retract = False if not macro_found else False if client.use_fw_retract is not defined else True if client.use_fw_retract|lower == 'true' and printer.firmware_retraction is defined else False %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.unretract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_unretract|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.extruder.can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %} {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %} {% set length = (params.LENGTH|float) if params.LENGTH is defined else 1.0 if not macro_found else client.retract|default(1.0) %} {% set speed = params.SPEED if params.SPEED is defined else 35 if not macro_found else client.speed_retract|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [exclude_object] [mcu rpi] serial = /tmp/katapult_host_mcu [mcu] serial = /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00 restart_method = command [input_shaper] shaper_freq_x = 62 shaper_type_x = mzv shaper_freq_y = 42 shaper_type_y = mzv [printer] kinematics = corexy max_velocity = 300 max_accel = 10000 max_accel_to_decel = 10000 max_z_velocity = 15 max_z_accel = 350 square_corner_velocity = 5.0 [stepper_x] step_pin = PF13 dir_pin = PF12 enable_pin = !PF14 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG6 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_x] uart_pin = PC4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_y] step_pin = PG0 dir_pin = PG1 enable_pin = !PF15 rotation_distance = 40 microsteps = 32 full_steps_per_rotation = 200 endstop_pin = PG9 position_min = 0 position_endstop = 300 position_max = 300 homing_speed = 25 homing_retract_dist = 5 homing_positive_dir = true [tmc2209 stepper_y] uart_pin = PD11 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z] step_pin = PF11 dir_pin = PG3 enable_pin = !PG5 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 endstop_pin = probe:z_virtual_endstop position_max = 260 position_min = -5 homing_speed = 8 second_homing_speed = 3 homing_retract_dist = 3 [tmc2209 stepper_z] uart_pin = PC6 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z1] step_pin = PG4 dir_pin = !PC1 enable_pin = !PA0 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z1] uart_pin = PC7 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z2] step_pin = PF9 dir_pin = PF10 enable_pin = !PG2 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z2] uart_pin = PF2 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [stepper_z3] step_pin = PC13 dir_pin = !PF0 enable_pin = !PF1 rotation_distance = 40 gear_ratio = 80:16 microsteps = 32 [tmc2209 stepper_z3] uart_pin = PE4 interpolate = false run_current = 0.8 sense_resistor = 0.110 stealthchop_threshold = 0 [heater_bed] heater_pin = PA3 sensor_type = Generic 3950 sensor_pin = PF3 max_power = 0.6 min_temp = 0 max_temp = 120 control = pid pid_kp = 58.437 pid_ki = 2.347 pid_kd = 363.769 [idle_timeout] timeout = 1800 [safe_z_home] home_xy_position = 150, 150 speed = 100 z_hop = 10 [quad_gantry_level] gantry_corners = -60,-10 360,370 points = 50,25 50,225 250,225 250,25 speed = 100 horizontal_move_z = 10 retries = 5 retry_tolerance = 0.0075 max_adjust = 10 [board_pins] aliases = EXP1_1=PE8, EXP1_2=PE7, EXP1_3=PE9, EXP1_4=PE10, EXP1_5=PE12, EXP1_6=PE13, EXP1_7=PE14, EXP1_8=PE15, EXP1_9=, EXP1_10=<5V>, EXP2_1=PA6, EXP2_2=PA5, EXP2_3=PB1, EXP2_4=PA4, EXP2_5=PB2, EXP2_6=PA7, EXP2_7=PC15, EXP2_8=, EXP2_9=, EXP2_10=<5V> [gcode_macro FILAMENT_LOAD] gcode = G0 X59 Y25 Z110 [gcode_macro CENTER_BED_PROBE_CALIBRATE] gcode = G0 X150 Y150 PROBE_CALIBRATE [gcode_macro M141] gcode = {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="chamber" target={s} [gcode_macro PRINT_START] gcode = G21 G90 M82 M107 G28 G28 Z0 G0 X1 Y-3.5 F12000 G0 Z0.2 F2000 M117 Heating bed... M190 S{params.BED_TEMP|default(75)|float} M117 Settling bed... G4 P210000 M117 Heating hotend... M109 S{params.HOTEND_TEMP|default(200)|float} [gcode_macro PRINT_END] gcode = {% set th = printer.toolhead %} {% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %} {% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %} {% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %} SAVE_GCODE_STATE NAME=STATE_PRINT_END M400 G92 E0 G1 E-5.0 F1800 TURN_OFF_HEATERS G90 G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 2} F3600 M107 BED_MESH_CLEAR RESTORE_GCODE_STATE NAME=STATE_PRINT_END [gcode_macro HEAT_SOAK] description = heats the bed for a while variable_target_temp = 0 variable_stage = None variable_check_interval = 10 variable_soak_time_remaining = 0 variable_total_time_elapsed = 0 gcode = {% set TARGET = params.TARGET | default(0) | float %} {% set DURATION = (params.DURATION | default(5) | int) * 60 %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'" SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION } SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ TARGET } M84 UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval } [gcode_macro CANCEL_HEAT_SOAK] description = cancels an in-progress HEAT_SOAK cycle gcode = SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'" UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1 [delayed_gcode heat_soaker] gcode = {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %} {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed } {% set stage = heat_soak.stage %} {% if stage == "heating" and printer.heater_bed.temperature >= heat_soak.target_temp %} {% set stage = "soaking" %} {% endif %} {% if stage == "soaking" %} {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining } {% if soak_time_remaining == 0 %} {% set stage = "done" %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'" {% if stage in ("done", "cancel") %} {% if stage == "cancel" %} {% set stage = "done" %} TURN_OFF_HEATERS M107 M117 { "soak cancelled after ~%.1fm" | format(total_time_elapsed / 60.0) } {% else %} M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) } {% endif %} SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0 SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0 {% else %} {% if total_time_elapsed % 90 == 0 %} {% if stage == "heating" %} M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) } {% elif stage == "soaking" %} M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) } {% endif %} {% endif %} UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval } G4 P1 {% endif %} ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' webhooks client 4123279096: New connection webhooks client 4123279096: Client info {'program': 'Moonraker', 'version': 'v0.8.0-186-g2641fc5'} mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00' mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-katapult_stm32f446xx_2B0040001750344D30353320-if00'