===== Config file ===== [mcu EBBCan] canbus_uuid = 0e0d81e4210c [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = EBBCan: PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/klipper_config/printer.cfg', '-l', '/home/pi/klipper_logs/klippy.log', '-a', '/tmp/klippy_uds'] Git version: 'v0.10.0-579-gee5bdbad' CPU: 4 core ARMv7 Processor rev 3 (v7l) Python: '2.7.16 (default, Oct 10 2019, 22:02:15) \n[GCC 8.3.0]' =============== Log rollover at Sun Sep 18 06:52:29 2022 =============== webhooks client 3041950856: Disconnected Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/klipper_config/printer.cfg', '-l', '/home/pi/klipper_logs/klippy.log', '-a', '/tmp/klippy_uds'] Git version: 'v0.10.0-579-gee5bdbad' CPU: 4 core ARMv7 Processor rev 3 (v7l) Python: '2.7.16 (default, Oct 10 2019, 22:02:15) \n[GCC 8.3.0]' Start printer at Sun Sep 18 06:52:48 2022 (1663480368.4 20.4) ===== Config file ===== [mcu EBBCan] canbus_uuid = 0e0d81e4210c [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = EBBCan: PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= 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 143, in _read_config m.add_printer_objects(config) File "/home/pi/klipper/klippy/toolhead.py", line 599, in add_printer_objects config.get_printer().add_object('toolhead', ToolHead(config)) File "/home/pi/klipper/klippy/toolhead.py", line 256, in __init__ self.kin = mod.load_kinematics(self, config) File "/home/pi/klipper/klippy/kinematics/corexy.py", line 99, in load_kinematics return CoreXYKinematics(toolhead, config) File "/home/pi/klipper/klippy/kinematics/corexy.py", line 13, in __init__ for n in 'xyz'] File "/home/pi/klipper/klippy/stepper.py", line 422, in LookupMultiRail default_position_endstop, units_in_radians) File "/home/pi/klipper/klippy/stepper.py", line 302, in __init__ self.add_extra_stepper(config) File "/home/pi/klipper/klippy/stepper.py", line 381, in add_extra_stepper pin_params = ppins.parse_pin(endstop_pin, True, True) File "/home/pi/klipper/klippy/pins.py", line 83, in parse_pin raise error("Unknown pin chip name '%s'" % (chip_name,)) error: Unknown pin chip name 'SHT42' webhooks client 3042057352: New connection webhooks client 3042057352: Client info {'program': 'Moonraker', 'version': 'v0.7.1-660-g5d856b9'} webhooks client 3042057352: Disconnected Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/klipper_config/printer.cfg', '-l', '/home/pi/klipper_logs/klippy.log', '-a', '/tmp/klippy_uds'] Git version: 'v0.10.0-579-gee5bdbad' CPU: 4 core ARMv7 Processor rev 3 (v7l) Python: '2.7.16 (default, Oct 10 2019, 22:02:15) \n[GCC 8.3.0]' Start printer at Sun Sep 18 07:07:15 2022 (1663481235.4 19.5) ===== Config file ===== [mcu EBBCan] canbus_uuid = 0e0d81e4210c [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = EBBCan: PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= 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 143, in _read_config m.add_printer_objects(config) File "/home/pi/klipper/klippy/toolhead.py", line 599, in add_printer_objects config.get_printer().add_object('toolhead', ToolHead(config)) File "/home/pi/klipper/klippy/toolhead.py", line 256, in __init__ self.kin = mod.load_kinematics(self, config) File "/home/pi/klipper/klippy/kinematics/corexy.py", line 99, in load_kinematics return CoreXYKinematics(toolhead, config) File "/home/pi/klipper/klippy/kinematics/corexy.py", line 13, in __init__ for n in 'xyz'] File "/home/pi/klipper/klippy/stepper.py", line 422, in LookupMultiRail default_position_endstop, units_in_radians) File "/home/pi/klipper/klippy/stepper.py", line 302, in __init__ self.add_extra_stepper(config) File "/home/pi/klipper/klippy/stepper.py", line 381, in add_extra_stepper pin_params = ppins.parse_pin(endstop_pin, True, True) File "/home/pi/klipper/klippy/pins.py", line 83, in parse_pin raise error("Unknown pin chip name '%s'" % (chip_name,)) error: Unknown pin chip name 'SHT42' webhooks client 3042397320: New connection webhooks client 3042397320: Client info {'program': 'Moonraker', 'version': 'v0.7.1-660-g5d856b9'} Attempting MCU 'mcu' reset Unable to issue reset command on MCU 'EBBCan' webhooks client 3042397320: Disconnected Restarting printer Start printer at Sun Sep 18 07:44:59 2022 (1663483499.1 2271.0) ===== Config file ===== [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = EBBCan: PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= 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 444, in load_config return PrinterProbe(config, ProbeEndstopWrapper(config)) File "/home/pi/klipper/klippy/extras/probe.py", line 299, in __init__ pin_params = ppins.lookup_pin(pin, can_invert=True, can_pullup=True) File "/home/pi/klipper/klippy/pins.py", line 98, in lookup_pin pin_params = self.parse_pin(pin_desc, can_invert, can_pullup) File "/home/pi/klipper/klippy/pins.py", line 83, in parse_pin raise error("Unknown pin chip name '%s'" % (chip_name,)) error: Unknown pin chip name 'EBBCan' webhooks client 3043019712: New connection webhooks client 3043019712: Client info {'program': 'Moonraker', 'version': 'v0.7.1-660-g5d856b9'} webhooks client 3043019712: Disconnected Restarting printer Start printer at Sun Sep 18 07:47:06 2022 (1663483626.1 2398.0) ===== Config file ===== [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = SHT42:PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= 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 444, in load_config return PrinterProbe(config, ProbeEndstopWrapper(config)) File "/home/pi/klipper/klippy/extras/probe.py", line 299, in __init__ pin_params = ppins.lookup_pin(pin, can_invert=True, can_pullup=True) File "/home/pi/klipper/klippy/pins.py", line 98, in lookup_pin pin_params = self.parse_pin(pin_desc, can_invert, can_pullup) File "/home/pi/klipper/klippy/pins.py", line 83, in parse_pin raise error("Unknown pin chip name '%s'" % (chip_name,)) error: Unknown pin chip name 'SHT42' webhooks client 3042426968: New connection webhooks client 3042426968: Client info {'program': 'Moonraker', 'version': 'v0.7.1-660-g5d856b9'} webhooks client 3042426968: Disconnected Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/klipper_config/printer.cfg', '-l', '/home/pi/klipper_logs/klippy.log', '-a', '/tmp/klippy_uds'] Git version: 'v0.10.0-579-gee5bdbad' CPU: 4 core ARMv7 Processor rev 3 (v7l) Python: '2.7.16 (default, Oct 10 2019, 22:02:15) \n[GCC 8.3.0]' Start printer at Sun Sep 18 07:47:27 2022 (1663483647.5 19.6) ===== Config file ===== [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = SHT42:PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= 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 444, in load_config return PrinterProbe(config, ProbeEndstopWrapper(config)) File "/home/pi/klipper/klippy/extras/probe.py", line 299, in __init__ pin_params = ppins.lookup_pin(pin, can_invert=True, can_pullup=True) File "/home/pi/klipper/klippy/pins.py", line 98, in lookup_pin pin_params = self.parse_pin(pin_desc, can_invert, can_pullup) File "/home/pi/klipper/klippy/pins.py", line 83, in parse_pin raise error("Unknown pin chip name '%s'" % (chip_name,)) error: Unknown pin chip name 'SHT42' webhooks client 3042417120: New connection webhooks client 3042417120: Client info {'program': 'Moonraker', 'version': 'v0.7.1-660-g5d856b9'} Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/klipper_config/printer.cfg', '-l', '/home/pi/klipper_logs/klippy.log', '-a', '/tmp/klippy_uds'] Git version: 'v0.10.0-579-gee5bdbad' CPU: 4 core ARMv7 Processor rev 3 (v7l) Python: '2.7.16 (default, Oct 10 2019, 22:02:15) \n[GCC 8.3.0]' Start printer at Sun Sep 18 09:17:18 2022 (1663489038.6 20.8) ===== Config file ===== [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = SHT42:PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= 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 444, in load_config return PrinterProbe(config, ProbeEndstopWrapper(config)) File "/home/pi/klipper/klippy/extras/probe.py", line 299, in __init__ pin_params = ppins.lookup_pin(pin, can_invert=True, can_pullup=True) File "/home/pi/klipper/klippy/pins.py", line 98, in lookup_pin pin_params = self.parse_pin(pin_desc, can_invert, can_pullup) File "/home/pi/klipper/klippy/pins.py", line 83, in parse_pin raise error("Unknown pin chip name '%s'" % (chip_name,)) error: Unknown pin chip name 'SHT42' webhooks client 3043092960: New connection webhooks client 3043092960: Client info {'program': 'Moonraker', 'version': 'v0.7.1-660-g5d856b9'} Starting Klippy... Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/klipper_config/printer.cfg', '-l', '/home/pi/klipper_logs/klippy.log', '-a', '/tmp/klippy_uds'] Git version: 'v0.10.0-579-gee5bdbad' CPU: 4 core ARMv7 Processor rev 3 (v7l) Python: '2.7.16 (default, Oct 10 2019, 22:02:15) \n[GCC 8.3.0]' Start printer at Sun Sep 18 10:04:00 2022 (1663491840.5 20.0) ===== Config file ===== [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = SHT42:PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= 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 444, in load_config return PrinterProbe(config, ProbeEndstopWrapper(config)) File "/home/pi/klipper/klippy/extras/probe.py", line 299, in __init__ pin_params = ppins.lookup_pin(pin, can_invert=True, can_pullup=True) File "/home/pi/klipper/klippy/pins.py", line 98, in lookup_pin pin_params = self.parse_pin(pin_desc, can_invert, can_pullup) File "/home/pi/klipper/klippy/pins.py", line 83, in parse_pin raise error("Unknown pin chip name '%s'" % (chip_name,)) error: Unknown pin chip name 'SHT42' webhooks client 3042937312: New connection webhooks client 3042937312: Client info {'program': 'Moonraker', 'version': 'v0.7.1-660-g5d856b9'} Attempting MCU 'mcu' reset webhooks client 3042937312: Disconnected Restarting printer Start printer at Sun Sep 18 11:01:53 2022 (1663495313.5 2744.5) ===== Config file ===== [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = SHT42:PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= 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 444, in load_config return PrinterProbe(config, ProbeEndstopWrapper(config)) File "/home/pi/klipper/klippy/extras/probe.py", line 299, in __init__ pin_params = ppins.lookup_pin(pin, can_invert=True, can_pullup=True) File "/home/pi/klipper/klippy/pins.py", line 98, in lookup_pin pin_params = self.parse_pin(pin_desc, can_invert, can_pullup) File "/home/pi/klipper/klippy/pins.py", line 83, in parse_pin raise error("Unknown pin chip name '%s'" % (chip_name,)) error: Unknown pin chip name 'SHT42' webhooks client 3044860472: New connection webhooks client 3044860472: Client info {'program': 'Moonraker', 'version': 'v0.7.1-660-g5d856b9'} Attempting MCU 'mcu' reset webhooks client 3044860472: Disconnected Restarting printer Start printer at Sun Sep 18 11:03:30 2022 (1663495410.4 2841.3) ===== Config file ===== [mcu EBBCan] canbus_uuid = 32c452993a02 [board_pins octopus_pro_429_tmc2209] aliases = x_step_pin=PF13, x_dir_pin=PF12, x_enable_pin=PF14, x_uart_pin=PC4, x_diag_pin=PG6, x_endstop_pin=PG6, y_step_pin=PG0, y_dir_pin=PG1, y_enable_pin=PF15, y_uart_pin=PD11, y_diag_pin=PG9, y_endstop_pin=PG9, z0_step_pin=PC13, z0_dir_pin=PF0, z0_enable_pin=PF1, z0_uart_pin=PE4, z0_diag_pin=null, z1_step_pin=PE2, z1_dir_pin=PE3, z1_enable_pin=PD4, z1_uart_pin=PE1, z1_diag_pin=null, z2_step_pin=PE6, z2_dir_pin=PA14, z2_enable_pin=PE0, z2_uart_pin=PD3, z2_diag_pin=null, e_step_pin=PF11, e_dir_pin=PG3, e_enable_pin=PG5, e_uart_pin=PC6, e_diag_pin=null, e_heater_pin=PA2, e_sensor_pin=PF4, stepper_spi_mosi_pin=PA7, stepper_spi_miso_pin=PA6, stepper_spi_sclk_pin=PA5, adxl345_cs_pin=PA15, bltouch_sensor_pin=PB7, bltouch_control_pin=PB6, probe_pin=PB7, fan_part_cooling_pin=PA8, fan_toolhead_cooling_pin=PE5, fan_controller_board_pin=PD12, heater_bed_heating_pin=PA1, heater_bed_sensor_pin=PF3, EXP1_1=PE8, EXP1_3=PE9, EXP1_5=PE12, EXP1_7=PE14, EXP1_9=, EXP1_2=PE7, EXP1_4=PE10, EXP1_6=PE13, EXP1_8=PE15, EXP1_10=<5V>, EXP2_1=PA6, EXP2_3=PB1, EXP2_5=PB2, EXP2_7=PC15, EXP2_9=, EXP2_2=PA5, EXP2_4=PA4, EXP2_6=PA7, EXP2_8=, EXP2_10=PC5, [mcu] baud = 250000 serial = /dev/btt-octopus-pro-429 [temperature_sensor Octopus_Pro_429] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [adxl345] spi_bus = spi3 cs_pin = adxl345_cs_pin [idle_timeout] gcode = {% if printer.webhooks.state|lower == 'ready' %} {% if printer.pause_resume.is_paused|lower == 'false' %} M117 Idle timeout reached TURN_OFF_HEATERS M84 {% endif %} {% endif %} timeout = 7200 [temperature_sensor raspberry_pi] sensor_type = temperature_host [skew_correction] [input_shaper] [virtual_sdcard] path = ~/gcode_files [display_status] [pause_resume] [force_move] enable_force_move = True [respond] [heater_bed] heater_pin = heater_bed_heating_pin sensor_pin = heater_bed_sensor_pin sensor_type = Generic 3950 min_temp = 0 max_temp = 120 pwm_cycle_time = 0.02 control = pid pid_kp = 52.407 pid_ki = 2.055 pid_kd = 334.092 [controller_fan controller_fan] pin = fan_controller_board_pin [printer] kinematics = corexy max_velocity = 200 max_accel = 1500 max_accel_to_decel = 750 max_z_velocity = 15 max_z_accel = 30 square_corner_velocity = 5 [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = SHT42:PA0 position_max = 400 position_endstop = 0 [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 full_steps_per_rotation = 400 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 endstop_pin = y_endstop_pin homing_positive_dir = true position_max = 400 position_endstop = 395 [stepper_z] endstop_pin = probe:z_virtual_endstop step_pin = z0_step_pin dir_pin = !z0_dir_pin enable_pin = !z0_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 position_min = -5 homing_speed = 10 position_max = 400 [stepper_z1] step_pin = z1_step_pin dir_pin = !z1_dir_pin enable_pin = !z1_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 full_steps_per_rotation = 400 microsteps = 64 [bed_mesh] speed = 200 horizontal_move_z = 5 mesh_min = 20,20 mesh_max = 365,360 probe_count = 7,7 fade_start = 1.0 fade_end = 10.0 mesh_pps = 2,2 algorithm = bicubic bicubic_tension = .2 [z_tilt] speed = 200 z_positions = 0,0 200,400 400,0 points = 60,60 235,370 360,60 horizontal_move_z = 12 retries = 10 retry_tolerance = 0.02 [tmc2209 stepper_x] uart_pin = x_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] uart_pin = y_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z] uart_pin = z0_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] uart_pin = z1_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] uart_pin = z2_uart_pin run_current = 1.1 stealthchop_threshold = 1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [probe] pin = EBBCan: PA1 x_offset = -29.8 y_offset = -13.5 speed = 5 samples = 3 sample_retract_dist = 2 lift_speed = 5.0 samples_result = median samples_tolerance = 0.02 samples_tolerance_retries = 5 z_offset = 2.05 [safe_z_home] home_xy_position = 200,200 speed = 135 z_hop = 12 [extruder] rotation_distance = 5.57 full_steps_per_rotation = 200 filament_diameter = 1.750 max_extrude_only_velocity = 120 max_extrude_only_accel = 800 pressure_advance_smooth_time = 0.02 dir_pin = !SHT42:PB3 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = SHT42:PA8 sensor_type = ATC Semitec 104GT-2 sensor_pin = SHT42:PB0 min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [gcode_macro ECHO_RATOS_VARS] description = Echo RatOS variables to the console. gcode = {% for var, value in printer["gcode_macro RatOS"].items() %} {action_respond_info(var ~ ": " ~ value)} {% endfor %} [gcode_macro RatOS] description = RatOS variable storage macro, will echo variables to the console when run. variable_relative_extrusion = False variable_preheat_extruder = True variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeline" variable_start_print_park_in = "back" variable_start_print_park_z_height = 50 variable_end_print_park_in = "back" variable_pause_print_park_in = "back" variable_macro_travel_speed = 300 gcode = ECHO_RATOS_VARS [gcode_macro MAYBE_HOME] description = Only home unhomed axis variable_is_kinematic_position_overriden = False gcode = {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." G28 SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False {% else %} {% set axes = '' %} {% set isHomed = true %} {% set axesToHome = '' %} {% if params.X is defined %} {% set axes = axes ~ 'X ' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% endif %} {% if params.Y is defined %} {% set axes = axes ~ 'Y ' %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% endif %} {% if params.Z is defined %} {% set axes = axes ~ 'Z ' %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} {% set axes = '' %} {% if 'x' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'X ' %} {% endif %} {% if 'y' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Y ' %} {% endif %} {% if 'z' not in printer.toolhead.homed_axes %} {% set isHomed = false %} {% set axesToHome = axesToHome ~ 'Z ' %} {% endif %} {% endif %} {% if isHomed is false %} M117 Homing {axesToHome} RESPOND MSG="Homing {axesToHome}" G28 {axesToHome} {% else %} RESPOND MSG="All requested axes already homed, skipping.." {% endif %} {% endif %} [gcode_macro PAUSE] description = Pauses the printer rename_existing = PAUSE_BASE variable_extrude = 1.5 gcode = SAVE_GCODE_STATE NAME=PAUSE_state {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resumes the print if the printer is paused. rename_existing = RESUME_BASE gcode = {% set E = printer["gcode_macro PAUSE"].extrude|float %} {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 G90 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 RESUME_BASE [gcode_macro CANCEL_PRINT] description = Cancels the printer rename_existing = CANCEL_PRINT_BASE gcode = END_PRINT G1 E-90 F6000 TURN_OFF_HEATERS CLEAR_PAUSE CANCEL_PRINT_BASE [gcode_macro PRIME_LINE] description = Prints a primeline, used internally, if configured, as part of the START_PRINT macro. gcode = SAVE_GCODE_STATE NAME=prime_line_state {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} F{speed} G1 Z0.3 F3000 G92 E0 G1 Y{printer.toolhead.axis_minimum.y + 80} E16 F1200 G1 Y{printer.toolhead.axis_minimum.y + 100} F{speed} RESTORE_GCODE_STATE NAME=prime_line_state [gcode_macro PRIME_BLOB] description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. gcode = SAVE_GCODE_STATE NAME=prime_blob_state M117 Priming nozzle with prime blob.. RESPOND MSG="Priming nozzle with prime blob.." {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} G90 M83 G1 Z5 F3000 G1 X{printer.toolhead.axis_minimum.x + 5} Y{printer.toolhead.axis_minimum.y + 10} Z0.5 F{speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{printer.toolhead.axis_minimum.y + 25} E1 G1 F200 Y{printer.toolhead.axis_minimum.y + 30} Z3.8 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 35} Z2.6 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 40} Z1.4 E0.5 G1 F200 Y{printer.toolhead.axis_minimum.y + 45} Z0.2 E0.5 M106 S0 G1 F200 Y{printer.toolhead.axis_minimum.y +50} Z0.2 E0.6 G1 F{speed} Y{printer.toolhead.axis_minimum.y + 100} RESTORE_GCODE_STATE NAME=prime_blob_state [gcode_macro _PARK] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% if params.X != '' %} {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} {% set safe_x = params.X|float %} {% else %} {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% else %} {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if params.LOCATION|default('back')|lower == 'back' %} {% set y = printer.toolhead.axis_maximum.y - 5 %} {% elif params.LOCATION|lower == 'front' %} {% set y = printer.toolhead.axis_minimum.y + 5 %} {% elif params.LOCATION|lower == 'center' %} {% set y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} G90 G0 X{safe_x} Y{y} F{speed} [gcode_macro M600] description = Executes a color change by pausing the printer an unloading the filament. gcode = PAUSE UNLOAD_FILAMENT M117 Please load new filament and resume RESPOND MSG="Please load new filament and resume" [gcode_macro UNLOAD_FILAMENT] description = Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. gcode = SAVE_GCODE_STATE NAME=unload_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Unloading filament... G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-130 F300 M117 Filament unloaded! RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." RESTORE_GCODE_STATE NAME=unload_state [gcode_macro LOAD_FILAMENT] description = Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. gcode = SAVE_GCODE_STATE NAME=load_state G91 {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} M117 Heating... M104 S{params.TEMP|default(220, true)} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} {% endif %} M117 Loading filament... G0 E100 F600 G4 P1000 G0 E40 F100 M400e M117 Filament loaded! RESPOND MSG="Filament loaded!" RESTORE_GCODE_STATE NAME=load_state [gcode_macro SET_CENTER_KINEMATIC_POSITION] description = FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. gcode = RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} [gcode_macro START_PRINT] description = Start print procedure, use this in your Slicer. gcode = CLEAR_PAUSE SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 MAYBE_HOME M117 Heating bed... RESPOND MSG="Heating bed..." M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } _START_PRINT_AFTER_HEATING_BED _START_PRINT_BED_MESH M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_PARK M117 Heating Extruder... RESPOND MSG="Heating Extruder..." M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } _START_PRINT_AFTER_HEATING_EXTRUDER M117 Printing... RESPOND MSG="Printing..." RESTORE_GCODE_STATE NAME=start_print_state {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} M83 {% else %} M82 {% endif %} G92 E0 [gcode_macro _START_PRINT_AFTER_HEATING_BED] gcode = {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} M117 Pre-heating extruder... M104 S150 TEMPERATURE_WAIT SENSOR=extruder MINIMUM=150 {% endif %} M117 Adjusting for tilt... Z_TILT_ADJUST M117 Rehoming after tilt adjustment... G28 Z [gcode_macro _START_PRINT_BED_MESH] gcode = {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE=ratos {% endif %} BED_MESH_PROFILE LOAD=ratos [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F6000 [gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] gcode = {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} PRIME_LINE {% endif %} {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} PRIME_BLOB {% endif %} {% if printer["gcode_macro RatOS"].skew_profile is defined %} SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = M140 S0 M104 T0 S0 M104 T1 S0 G91 G1 Z+60 F1500 G90 G28 Y G28 X M84 M107 M117 Done :) [gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] gcode = RESPOND MSG="Cleaning up..." [gcode_macro _END_PRINT_AFTER_HEATERS_OFF] gcode = {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 [gcode_macro _END_PRINT_PARK] gcode = _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} [gcode_shell_command generate_shaper_graph_x] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/klipper_config/config/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/klipper_config/config/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/klipper_config/config/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/klipper_config/config/scripts/change-hostname.sh timeout = 10. [gcode_macro GENERATE_SHAPER_GRAPHS] description = Genarates input shaper resonances graphs for analysis. Uses the AXIS parameter for if you only want to do one axis at a time, (eg. GENERATE_SHAPER_GRAPHS AXIS=X) gcode = {% if params.AXIS is defined %} {% if params.AXIS|lower == 'x' %} MAYBE_HOME TEST_RESONANCES AXIS=X RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RESPOND MSG="Input shaper graph generated for the X axis. You'll find it in the input_shaper folder in the machine tab!" {% elif params.AXIS|lower == 'y' %} MAYBE_HOME TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graph generated for the Y axis. You'll find it in the input_shaper folder in the machine tab!" {% else %} {action_raise_error("Unknown axis specified. Expected X or Y.")} {% endif %} {% else %} MAYBE_HOME TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y RUN_SHELL_COMMAND CMD=generate_shaper_graph_x RUN_SHELL_COMMAND CMD=generate_shaper_graph_y RESPOND MSG="Input shaper graphs generated for X and Y. You'll find them in the input_shaper folder in the machine tab!" {% endif %} [gcode_macro MEASURE_COREXY_BELT_TENSION] description = Generates resonance graph used to ensure belts are equally tensioned. gcode = TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower RUN_SHELL_COMMAND CMD=generate_belt_tension_graph [gcode_macro COMPILE_FIRMWARE] description = Compiles firmware with currently installed klipper version for all supported RatOS boards. Note: this may take up to 10 minutes. gcode = RESPOND MSG="Compiling binaries.. This can take up to 10 minutes. Please do not turn off your Raspberry Pi!" RUN_SHELL_COMMAND CMD=compile_binaries RESPOND MSG="Firmware binaries compiled successfully! You can find them in the firmware_binaries folder in the machine tab!" [gcode_macro CHANGE_HOSTNAME] description = Change the hostname of your Raspberry Pi. gcode = {% if params.HOSTNAME is not defined %} RESPOND MSG='You have to specify a new hostname with the HOSTNAME parameter. Ex: CHANGE_HOSTNAME HOSTNAME="MY_NEW_HOSTNAME"' RESPOND MSG="Please note: RFCs mandate that a hostname's labels may contain only the ASCII letters 'a' through 'z' (case-insensitive), the digits '0' through '9', and the hyphen. Hostname labels cannot begin or end with a hyphen. No other symbols, punctuation characters, or blank spaces are permitted." {% else %} RUN_SHELL_COMMAND CMD=change_hostname PARAMS={params.HOSTNAME} {% endif %} [gcode_macro MoverCentro] gcode = G90 G1 X200 Y200 G91 [gcode_macro VelocidadFull] gcode = M220 S100 [gcode_macro Tranquilamente] gcode = M220 S20 [gcode_macro Z0] gcode = G28 Z0 [gcode_macro SeparaseZ] gcode = G91 G1 Z+150 F1500 [gcode_macro SetCurrent] gcode = SET_TMC_CURRENT stepper=extruder CURRENT=0.6 HOLDCURRENT=0.2 [gcode_macro GetCurrent] gcode = SET_TMC_CURRENT stepper=extruder [gcode_macro SeparaseZPoco] gcode = G91 G1 Z+15 F1500 [bed_mesh default] version = 1 points = 0.006285, -0.050434, -0.016215, 0.026753, 0.053472, 0.055035, 0.164253 0.069566, -0.026997, 0.012378, 0.003316, -0.004340, -0.010122, 0.086753 0.011597, -0.014184, 0.075816, 0.013785, 0.010035, -0.010122, 0.017847 0.007535, -0.026840, 0.000035, 0.023941, -0.052465, -0.001372, -0.078090 0.036910, 0.010347, 0.168472, 0.187691, 0.007066, 0.058941, -0.075434 0.096441, 0.016128, 0.051597, 0.073628, -0.009809, -0.070122, -0.115122 0.354566, 0.066128, 0.064722, 0.031285, -0.058403, -0.108403, -0.123247 tension = 0.2 min_x = 20.0 algo = bicubic y_count = 7 mesh_y_pps = 2 min_y = 20.0 x_count = 7 max_y = 359.96 mesh_x_pps = 2 max_x = 365.0 ======================= 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 143, in _read_config m.add_printer_objects(config) File "/home/pi/klipper/klippy/toolhead.py", line 599, in add_printer_objects config.get_printer().add_object('toolhead', ToolHead(config)) File "/home/pi/klipper/klippy/toolhead.py", line 256, in __init__ self.kin = mod.load_kinematics(self, config) File "/home/pi/klipper/klippy/kinematics/corexy.py", line 99, in load_kinematics return CoreXYKinematics(toolhead, config) File "/home/pi/klipper/klippy/kinematics/corexy.py", line 13, in __init__ for n in 'xyz'] File "/home/pi/klipper/klippy/stepper.py", line 422, in LookupMultiRail default_position_endstop, units_in_radians) File "/home/pi/klipper/klippy/stepper.py", line 302, in __init__ self.add_extra_stepper(config) File "/home/pi/klipper/klippy/stepper.py", line 381, in add_extra_stepper pin_params = ppins.parse_pin(endstop_pin, True, True) File "/home/pi/klipper/klippy/pins.py", line 83, in parse_pin raise error("Unknown pin chip name '%s'" % (chip_name,)) error: Unknown pin chip name 'SHT42' webhooks client 3044992784: New connection webhooks client 3044992784: Client info {'program': 'Moonraker', 'version': 'v0.7.1-660-g5d856b9'}