===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 ======================= Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 Configured MCU 'mcu' (1024 moves) Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-140-gdd390913' CPU: 4 core ? Python: '3.9.2 (default, Feb 28 2021, 17:03:44) \n[GCC 10.2.1 20210110]' webhooks client 547868621888: {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} =============== Log rollover at Fri Mar 17 13:22:19 2023 =============== Stats 115.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3358 bytes_read=7912 bytes_retransmit=9 bytes_invalid=0 send_seq=278 receive_seq=278 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002979 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.31 cputime=7.546 memavail=498328 print_time=9.601 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 116.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3379 bytes_read=8080 bytes_retransmit=9 bytes_invalid=0 send_seq=280 receive_seq=280 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002708 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.31 cputime=7.574 memavail=492952 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 117.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3385 bytes_read=8228 bytes_retransmit=9 bytes_invalid=0 send_seq=281 receive_seq=281 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002433 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.31 cputime=7.594 memavail=490012 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 118.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3391 bytes_read=8405 bytes_retransmit=9 bytes_invalid=0 send_seq=282 receive_seq=282 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002269 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.31 cputime=7.616 memavail=490288 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 119.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3397 bytes_read=8568 bytes_retransmit=9 bytes_invalid=0 send_seq=283 receive_seq=283 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002098 Octopus: temp=23.0 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.31 cputime=7.634 memavail=492932 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 120.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3403 bytes_read=8744 bytes_retransmit=9 bytes_invalid=0 send_seq=284 receive_seq=284 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001953 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.20 cputime=7.657 memavail=492876 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.8 pwm=0.000 Stats 121.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3409 bytes_read=8907 bytes_retransmit=9 bytes_invalid=0 send_seq=285 receive_seq=285 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001929 Octopus: temp=23.0 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.20 cputime=7.686 memavail=492688 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 122.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3415 bytes_read=9070 bytes_retransmit=9 bytes_invalid=0 send_seq=286 receive_seq=286 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001946 Octopus: temp=23.2 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.20 cputime=7.716 memavail=492696 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 123.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3421 bytes_read=9232 bytes_retransmit=9 bytes_invalid=0 send_seq=287 receive_seq=287 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001964 Octopus: temp=23.0 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.20 cputime=7.747 memavail=492736 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 124.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3427 bytes_read=9395 bytes_retransmit=9 bytes_invalid=0 send_seq=288 receive_seq=288 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001973 Octopus: temp=23.1 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.20 cputime=7.769 memavail=493088 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 125.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3433 bytes_read=9558 bytes_retransmit=9 bytes_invalid=0 send_seq=289 receive_seq=289 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001938 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.35 cputime=7.792 memavail=489796 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 126.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3445 bytes_read=9734 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=290 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001883 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.35 cputime=7.810 memavail=490572 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 127.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3451 bytes_read=9913 bytes_retransmit=9 bytes_invalid=0 send_seq=292 receive_seq=292 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001811 Octopus: temp=22.9 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.35 cputime=7.828 memavail=490572 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 128.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3457 bytes_read=10076 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001802 Octopus: temp=23.0 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.35 cputime=7.850 memavail=490548 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 129.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3463 bytes_read=10227 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001795 Octopus: temp=22.8 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.35 cputime=7.869 memavail=490744 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 130.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3469 bytes_read=10385 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001775 Octopus: temp=23.0 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.24 cputime=7.887 memavail=490796 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 131.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3475 bytes_read=10562 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001766 Octopus: temp=22.9 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.24 cputime=7.905 memavail=490796 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 132.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3481 bytes_read=10724 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001768 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.24 cputime=7.922 memavail=490796 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 133.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3487 bytes_read=10887 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001771 Octopus: temp=22.9 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.24 cputime=7.939 memavail=490796 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 134.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3493 bytes_read=11050 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001802 Octopus: temp=23.0 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.24 cputime=7.965 memavail=490556 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 135.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3499 bytes_read=11227 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001842 Octopus: temp=23.1 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.22 cputime=7.997 memavail=490128 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 136.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3505 bytes_read=11389 bytes_retransmit=9 bytes_invalid=0 send_seq=301 receive_seq=301 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001875 Octopus: temp=22.9 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.22 cputime=8.028 memavail=490160 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 137.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3511 bytes_read=11552 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002163 Octopus: temp=22.9 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.22 cputime=8.059 memavail=490664 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 138.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3517 bytes_read=11729 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002135 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.22 cputime=8.090 memavail=490664 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 139.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3523 bytes_read=11877 bytes_retransmit=9 bytes_invalid=0 send_seq=304 receive_seq=304 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002117 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.22 cputime=8.120 memavail=490420 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 140.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3529 bytes_read=12040 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002148 Octopus: temp=22.9 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.04 cputime=8.152 memavail=490420 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 141.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3535 bytes_read=12231 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002131 Octopus: temp=23.0 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.04 cputime=8.184 memavail=490672 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 142.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3541 bytes_read=12379 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002113 Octopus: temp=22.9 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=2.04 cputime=8.216 memavail=490672 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 143.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3547 bytes_read=12542 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002099 Octopus: temp=23.0 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.04 cputime=8.249 memavail=490672 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 144.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3553 bytes_read=12719 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002079 Octopus: temp=23.0 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=2.04 cputime=8.279 memavail=490672 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 145.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3559 bytes_read=12867 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002065 Octopus: temp=22.9 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.88 cputime=8.311 memavail=490672 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 146.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3565 bytes_read=13044 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002034 Octopus: temp=22.9 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.88 cputime=8.336 memavail=491980 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 147.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3571 bytes_read=13221 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002009 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.88 cputime=8.353 memavail=491980 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.8 pwm=0.000 Stats 148.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3577 bytes_read=13384 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001984 Octopus: temp=22.9 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.88 cputime=8.370 memavail=491980 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 149.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3583 bytes_read=13532 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001963 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.88 cputime=8.386 memavail=491996 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 150.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3589 bytes_read=13709 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001946 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.73 cputime=8.404 memavail=491996 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 151.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3595 bytes_read=13886 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001942 Octopus: temp=23.0 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.73 cputime=8.428 memavail=491996 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 152.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3601 bytes_read=14033 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001950 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.73 cputime=8.459 memavail=491996 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 153.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3607 bytes_read=14197 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001958 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.73 cputime=8.491 memavail=491996 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 154.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3613 bytes_read=14356 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001965 Octopus: temp=23.0 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.73 cputime=8.523 memavail=491996 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 155.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3619 bytes_read=14504 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001960 Octopus: temp=22.8 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.59 cputime=8.554 memavail=491996 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 156.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3625 bytes_read=14695 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001964 Octopus: temp=23.0 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.59 cputime=8.586 memavail=492008 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 157.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3631 bytes_read=14858 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001964 Octopus: temp=23.1 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.59 cputime=8.618 memavail=508336 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 158.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3637 bytes_read=15006 bytes_retransmit=9 bytes_invalid=0 send_seq=323 receive_seq=323 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001956 Octopus: temp=23.1 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.59 cputime=8.649 memavail=508164 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 159.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3643 bytes_read=15183 bytes_retransmit=9 bytes_invalid=0 send_seq=324 receive_seq=324 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001959 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.59 cputime=8.681 memavail=508164 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 160.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3649 bytes_read=15346 bytes_retransmit=9 bytes_invalid=0 send_seq=325 receive_seq=325 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001963 Octopus: temp=22.8 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.46 cputime=8.713 memavail=508164 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 161.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3655 bytes_read=15508 bytes_retransmit=9 bytes_invalid=0 send_seq=326 receive_seq=326 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001964 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.46 cputime=8.744 memavail=507912 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 162.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3661 bytes_read=15685 bytes_retransmit=9 bytes_invalid=0 send_seq=327 receive_seq=327 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001964 Octopus: temp=22.9 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.46 cputime=8.776 memavail=507912 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 163.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3667 bytes_read=15848 bytes_retransmit=9 bytes_invalid=0 send_seq=328 receive_seq=328 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001967 Octopus: temp=23.0 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.46 cputime=8.808 memavail=507912 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 164.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3673 bytes_read=15996 bytes_retransmit=9 bytes_invalid=0 send_seq=329 receive_seq=329 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001986 Octopus: temp=23.2 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.46 cputime=8.840 memavail=507688 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 165.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3679 bytes_read=16173 bytes_retransmit=9 bytes_invalid=0 send_seq=330 receive_seq=330 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001984 Octopus: temp=23.0 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.51 cputime=8.872 memavail=507436 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 166.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3685 bytes_read=16350 bytes_retransmit=9 bytes_invalid=0 send_seq=331 receive_seq=331 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001992 Octopus: temp=23.0 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.51 cputime=8.903 memavail=505432 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 167.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3691 bytes_read=16498 bytes_retransmit=9 bytes_invalid=0 send_seq=332 receive_seq=332 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001992 Octopus: temp=23.1 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.51 cputime=8.934 memavail=505432 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 168.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3697 bytes_read=16675 bytes_retransmit=9 bytes_invalid=0 send_seq=333 receive_seq=333 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001998 Octopus: temp=23.1 raspberry_pi: temp=37.6 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.51 cputime=8.966 memavail=505432 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.8 pwm=0.000 Stats 169.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3703 bytes_read=16838 bytes_retransmit=9 bytes_invalid=0 send_seq=334 receive_seq=334 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001992 Octopus: temp=23.0 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.51 cputime=8.997 memavail=505432 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 170.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3709 bytes_read=16986 bytes_retransmit=9 bytes_invalid=0 send_seq=335 receive_seq=335 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001987 Octopus: temp=23.0 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.38 cputime=9.027 memavail=505432 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 171.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3715 bytes_read=17177 bytes_retransmit=9 bytes_invalid=0 send_seq=336 receive_seq=336 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001979 Octopus: temp=22.9 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.38 cputime=9.058 memavail=505432 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 172.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3721 bytes_read=17340 bytes_retransmit=9 bytes_invalid=0 send_seq=337 receive_seq=337 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001979 Octopus: temp=22.9 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=1.38 cputime=9.088 memavail=505432 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 173.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3727 bytes_read=17488 bytes_retransmit=9 bytes_invalid=0 send_seq=338 receive_seq=338 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001974 Octopus: temp=22.9 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.38 cputime=9.119 memavail=505432 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 174.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3733 bytes_read=17665 bytes_retransmit=9 bytes_invalid=0 send_seq=339 receive_seq=339 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001969 Octopus: temp=22.8 raspberry_pi: temp=36.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.38 cputime=9.151 memavail=505432 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 175.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3739 bytes_read=17828 bytes_retransmit=9 bytes_invalid=0 send_seq=340 receive_seq=340 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001968 Octopus: temp=22.8 raspberry_pi: temp=37.0 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.43 cputime=9.183 memavail=505436 print_time=11.072 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 303.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4519 bytes_read=38960 bytes_retransmit=9 bytes_invalid=0 send_seq=470 receive_seq=470 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001955 Octopus: temp=23.1 raspberry_pi: temp=38.1 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.21 cputime=12.845 memavail=505000 print_time=198.728 buffer_time=0.349 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 304.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4525 bytes_read=39108 bytes_retransmit=9 bytes_invalid=0 send_seq=471 receive_seq=471 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001963 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.21 cputime=12.875 memavail=505000 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 305.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4531 bytes_read=39285 bytes_retransmit=9 bytes_invalid=0 send_seq=472 receive_seq=472 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001959 Octopus: temp=23.0 raspberry_pi: temp=38.1 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=12.907 memavail=505000 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 306.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4537 bytes_read=39448 bytes_retransmit=9 bytes_invalid=0 send_seq=473 receive_seq=473 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001961 Octopus: temp=23.0 raspberry_pi: temp=38.1 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=12.933 memavail=503516 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 307.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4543 bytes_read=39596 bytes_retransmit=9 bytes_invalid=0 send_seq=474 receive_seq=474 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001953 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=12.949 memavail=503524 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 308.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4549 bytes_read=39787 bytes_retransmit=9 bytes_invalid=0 send_seq=475 receive_seq=475 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001946 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=12.966 memavail=503524 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 309.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4561 bytes_read=39966 bytes_retransmit=9 bytes_invalid=0 send_seq=477 receive_seq=477 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001935 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=12.983 memavail=503524 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 310.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4567 bytes_read=40114 bytes_retransmit=9 bytes_invalid=0 send_seq=478 receive_seq=478 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001930 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.40 cputime=12.999 memavail=503524 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 311.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4573 bytes_read=40291 bytes_retransmit=9 bytes_invalid=0 send_seq=479 receive_seq=479 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001933 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.40 cputime=13.023 memavail=503524 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 312.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4579 bytes_read=40454 bytes_retransmit=9 bytes_invalid=0 send_seq=480 receive_seq=480 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001962 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.40 cputime=13.055 memavail=503524 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 313.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4585 bytes_read=40616 bytes_retransmit=9 bytes_invalid=0 send_seq=481 receive_seq=481 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001966 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=13.087 memavail=503524 print_time=198.728 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 314.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4591 bytes_read=40793 bytes_retransmit=9 bytes_invalid=0 send_seq=482 receive_seq=482 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001967 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.40 cputime=13.122 memavail=503524 print_time=208.876 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 315.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4597 bytes_read=40956 bytes_retransmit=9 bytes_invalid=0 send_seq=483 receive_seq=483 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001966 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.37 cputime=13.154 memavail=503524 print_time=208.876 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 316.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4603 bytes_read=41104 bytes_retransmit=9 bytes_invalid=0 send_seq=484 receive_seq=484 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001964 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=0.37 cputime=13.185 memavail=503288 print_time=208.876 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 317.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4609 bytes_read=41281 bytes_retransmit=9 bytes_invalid=0 send_seq=485 receive_seq=485 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001961 Octopus: temp=22.9 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.37 cputime=13.216 memavail=503288 print_time=208.876 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 318.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4615 bytes_read=41458 bytes_retransmit=9 bytes_invalid=0 send_seq=486 receive_seq=486 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001958 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.37 cputime=13.247 memavail=503288 print_time=208.876 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 319.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4621 bytes_read=41603 bytes_retransmit=9 bytes_invalid=0 send_seq=487 receive_seq=487 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001959 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.37 cputime=13.278 memavail=503288 print_time=208.876 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 320.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4627 bytes_read=41768 bytes_retransmit=9 bytes_invalid=0 send_seq=488 receive_seq=488 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001958 Octopus: temp=23.2 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.34 cputime=13.310 memavail=503288 print_time=208.876 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 321.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4633 bytes_read=41930 bytes_retransmit=9 bytes_invalid=0 send_seq=489 receive_seq=489 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001958 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.34 cputime=13.341 memavail=503288 print_time=208.876 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 322.3: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4639 bytes_read=42078 bytes_retransmit=9 bytes_invalid=0 send_seq=490 receive_seq=490 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001958 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.34 cputime=13.371 memavail=503288 print_time=208.876 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 323.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4645 bytes_read=42269 bytes_retransmit=9 bytes_invalid=0 send_seq=491 receive_seq=491 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001958 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.34 cputime=13.407 memavail=503288 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 324.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4651 bytes_read=42432 bytes_retransmit=9 bytes_invalid=0 send_seq=492 receive_seq=492 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001956 Octopus: temp=23.0 raspberry_pi: temp=38.1 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.34 cputime=13.437 memavail=503288 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 325.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4657 bytes_read=42580 bytes_retransmit=9 bytes_invalid=0 send_seq=493 receive_seq=493 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001953 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.31 cputime=13.467 memavail=503288 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 326.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4663 bytes_read=42757 bytes_retransmit=9 bytes_invalid=0 send_seq=494 receive_seq=494 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001957 Octopus: temp=22.9 raspberry_pi: temp=38.1 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.31 cputime=13.498 memavail=503288 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 327.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4669 bytes_read=42920 bytes_retransmit=9 bytes_invalid=0 send_seq=495 receive_seq=495 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001985 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.31 cputime=13.530 memavail=503308 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 328.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4675 bytes_read=43082 bytes_retransmit=9 bytes_invalid=0 send_seq=496 receive_seq=496 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001988 Octopus: temp=23.0 raspberry_pi: temp=38.1 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.31 cputime=13.562 memavail=503308 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 329.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4681 bytes_read=43259 bytes_retransmit=9 bytes_invalid=0 send_seq=497 receive_seq=497 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001989 Octopus: temp=23.0 raspberry_pi: temp=37.6 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=13.594 memavail=503308 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 330.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4687 bytes_read=43422 bytes_retransmit=9 bytes_invalid=0 send_seq=498 receive_seq=498 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001990 Octopus: temp=22.9 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.29 cputime=13.626 memavail=503308 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 331.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4693 bytes_read=43570 bytes_retransmit=9 bytes_invalid=0 send_seq=499 receive_seq=499 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001987 Octopus: temp=22.9 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.29 cputime=13.657 memavail=503308 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 332.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4699 bytes_read=43747 bytes_retransmit=9 bytes_invalid=0 send_seq=500 receive_seq=500 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001982 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.29 cputime=13.687 memavail=503308 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 333.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4705 bytes_read=43924 bytes_retransmit=9 bytes_invalid=0 send_seq=501 receive_seq=501 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001981 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.29 cputime=13.719 memavail=503308 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 334.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4711 bytes_read=44072 bytes_retransmit=9 bytes_invalid=0 send_seq=502 receive_seq=502 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001978 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.29 cputime=13.750 memavail=503308 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 335.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4717 bytes_read=44249 bytes_retransmit=9 bytes_invalid=0 send_seq=503 receive_seq=503 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001975 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.26 cputime=13.782 memavail=503308 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 336.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4723 bytes_read=44412 bytes_retransmit=9 bytes_invalid=0 send_seq=504 receive_seq=504 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001977 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.26 cputime=13.807 memavail=503060 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 337.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4729 bytes_read=44560 bytes_retransmit=9 bytes_invalid=0 send_seq=505 receive_seq=505 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001970 Octopus: temp=22.9 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.26 cputime=13.824 memavail=508436 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 338.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4735 bytes_read=44751 bytes_retransmit=9 bytes_invalid=0 send_seq=506 receive_seq=506 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001964 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.26 cputime=13.841 memavail=508316 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 339.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4741 bytes_read=44914 bytes_retransmit=9 bytes_invalid=0 send_seq=507 receive_seq=507 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001958 Octopus: temp=23.0 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.26 cputime=13.859 memavail=508064 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 340.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4747 bytes_read=45076 bytes_retransmit=9 bytes_invalid=0 send_seq=508 receive_seq=508 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001959 Octopus: temp=23.1 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.24 cputime=13.875 memavail=508064 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 341.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4753 bytes_read=45239 bytes_retransmit=9 bytes_invalid=0 send_seq=509 receive_seq=509 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001956 Octopus: temp=22.9 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.24 cputime=13.897 memavail=507812 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 342.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4759 bytes_read=45402 bytes_retransmit=9 bytes_invalid=0 send_seq=510 receive_seq=510 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001959 Octopus: temp=23.1 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.24 cputime=13.929 memavail=507812 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 343.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4765 bytes_read=45574 bytes_retransmit=9 bytes_invalid=0 send_seq=511 receive_seq=511 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001961 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.24 cputime=13.960 memavail=507812 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 344.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4771 bytes_read=45726 bytes_retransmit=9 bytes_invalid=0 send_seq=512 receive_seq=512 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001962 Octopus: temp=22.9 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.24 cputime=13.991 memavail=507812 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 345.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4777 bytes_read=45888 bytes_retransmit=9 bytes_invalid=0 send_seq=513 receive_seq=513 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001964 Octopus: temp=23.1 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.22 cputime=14.023 memavail=507816 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 346.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4783 bytes_read=46050 bytes_retransmit=9 bytes_invalid=0 send_seq=514 receive_seq=514 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001964 Octopus: temp=23.1 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.22 cputime=14.049 memavail=505828 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 347.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4789 bytes_read=46213 bytes_retransmit=9 bytes_invalid=0 send_seq=515 receive_seq=515 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001956 Octopus: temp=23.0 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.22 cputime=14.065 memavail=505852 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 348.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4795 bytes_read=46390 bytes_retransmit=9 bytes_invalid=0 send_seq=516 receive_seq=516 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001950 Octopus: temp=23.1 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.22 cputime=14.083 memavail=505852 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 349.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4801 bytes_read=46552 bytes_retransmit=9 bytes_invalid=0 send_seq=517 receive_seq=517 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001945 Octopus: temp=23.2 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.22 cputime=14.101 memavail=505852 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 350.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4807 bytes_read=46715 bytes_retransmit=9 bytes_invalid=0 send_seq=518 receive_seq=518 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001940 Octopus: temp=23.1 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.45 cputime=14.119 memavail=505856 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 351.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4813 bytes_read=46878 bytes_retransmit=9 bytes_invalid=0 send_seq=519 receive_seq=519 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001935 Octopus: temp=23.1 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.45 cputime=14.140 memavail=505856 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 352.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4819 bytes_read=47055 bytes_retransmit=9 bytes_invalid=0 send_seq=520 receive_seq=520 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001940 Octopus: temp=23.1 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.45 cputime=14.172 memavail=505856 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 353.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4825 bytes_read=47217 bytes_retransmit=9 bytes_invalid=0 send_seq=521 receive_seq=521 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001945 Octopus: temp=23.1 raspberry_pi: temp=39.2 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.45 cputime=14.204 memavail=505856 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 354.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4831 bytes_read=47380 bytes_retransmit=9 bytes_invalid=0 send_seq=522 receive_seq=522 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001950 Octopus: temp=23.2 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.45 cputime=14.235 memavail=505856 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 355.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4837 bytes_read=47557 bytes_retransmit=9 bytes_invalid=0 send_seq=523 receive_seq=523 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001955 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.41 cputime=14.266 memavail=505856 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 356.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4843 bytes_read=47720 bytes_retransmit=9 bytes_invalid=0 send_seq=524 receive_seq=524 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001958 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.41 cputime=14.293 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 357.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4849 bytes_read=47868 bytes_retransmit=9 bytes_invalid=0 send_seq=525 receive_seq=525 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001952 Octopus: temp=23.0 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.41 cputime=14.309 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 358.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4855 bytes_read=48059 bytes_retransmit=9 bytes_invalid=0 send_seq=526 receive_seq=526 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001948 Octopus: temp=23.2 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.41 cputime=14.324 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 359.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4861 bytes_read=48222 bytes_retransmit=9 bytes_invalid=0 send_seq=527 receive_seq=527 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001943 Octopus: temp=23.1 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.41 cputime=14.340 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 360.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4867 bytes_read=48370 bytes_retransmit=9 bytes_invalid=0 send_seq=528 receive_seq=528 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001940 Octopus: temp=23.1 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.38 cputime=14.356 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 361.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4873 bytes_read=48547 bytes_retransmit=9 bytes_invalid=0 send_seq=529 receive_seq=529 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001935 Octopus: temp=23.2 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.38 cputime=14.376 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 362.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4879 bytes_read=48710 bytes_retransmit=9 bytes_invalid=0 send_seq=530 receive_seq=530 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001938 Octopus: temp=23.1 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.38 cputime=14.408 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 363.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4885 bytes_read=48858 bytes_retransmit=9 bytes_invalid=0 send_seq=531 receive_seq=531 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001941 Octopus: temp=23.1 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.38 cputime=14.440 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 364.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4891 bytes_read=49049 bytes_retransmit=9 bytes_invalid=0 send_seq=532 receive_seq=532 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001944 Octopus: temp=23.0 raspberry_pi: temp=39.2 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.38 cputime=14.473 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 365.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4897 bytes_read=49212 bytes_retransmit=9 bytes_invalid=0 send_seq=533 receive_seq=533 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001946 Octopus: temp=23.0 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=14.505 memavail=504640 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 366.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4903 bytes_read=49360 bytes_retransmit=9 bytes_invalid=0 send_seq=534 receive_seq=534 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001949 Octopus: temp=23.0 raspberry_pi: temp=38.6 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=14.534 memavail=504136 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 367.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4909 bytes_read=49529 bytes_retransmit=9 bytes_invalid=0 send_seq=535 receive_seq=535 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001945 Octopus: temp=23.0 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=14.550 memavail=504152 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 368.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4915 bytes_read=49683 bytes_retransmit=9 bytes_invalid=0 send_seq=536 receive_seq=536 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001946 Octopus: temp=23.1 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=14.567 memavail=504152 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 369.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4927 bytes_read=49860 bytes_retransmit=9 bytes_invalid=0 send_seq=538 receive_seq=538 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001943 Octopus: temp=23.0 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.35 cputime=14.585 memavail=504152 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 370.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4933 bytes_read=50037 bytes_retransmit=9 bytes_invalid=0 send_seq=539 receive_seq=539 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001938 Octopus: temp=23.1 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.32 cputime=14.602 memavail=504152 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 371.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4939 bytes_read=50200 bytes_retransmit=9 bytes_invalid=0 send_seq=540 receive_seq=540 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001940 Octopus: temp=23.0 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.32 cputime=14.623 memavail=504152 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 372.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4945 bytes_read=50348 bytes_retransmit=9 bytes_invalid=0 send_seq=541 receive_seq=541 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001945 Octopus: temp=23.0 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.8 pwm=0.000 sysload=0.32 cputime=14.654 memavail=504152 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 373.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4951 bytes_read=50525 bytes_retransmit=9 bytes_invalid=0 send_seq=542 receive_seq=542 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001948 Octopus: temp=23.0 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.32 cputime=14.686 memavail=504152 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 374.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4957 bytes_read=50702 bytes_retransmit=9 bytes_invalid=0 send_seq=543 receive_seq=543 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001949 Octopus: temp=23.0 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.32 cputime=14.717 memavail=504168 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 375.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4963 bytes_read=50850 bytes_retransmit=9 bytes_invalid=0 send_seq=544 receive_seq=544 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001950 Octopus: temp=23.1 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.45 cputime=14.747 memavail=504168 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 376.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4969 bytes_read=51027 bytes_retransmit=9 bytes_invalid=0 send_seq=545 receive_seq=545 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001948 Octopus: temp=22.9 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.45 cputime=14.775 memavail=502684 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 377.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4975 bytes_read=51190 bytes_retransmit=9 bytes_invalid=0 send_seq=546 receive_seq=546 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001943 Octopus: temp=23.1 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.45 cputime=14.791 memavail=502688 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 378.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4981 bytes_read=51338 bytes_retransmit=9 bytes_invalid=0 send_seq=547 receive_seq=547 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001941 Octopus: temp=23.1 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.45 cputime=14.808 memavail=502688 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 379.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4987 bytes_read=51529 bytes_retransmit=9 bytes_invalid=0 send_seq=548 receive_seq=548 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001939 Octopus: temp=23.0 raspberry_pi: temp=39.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.45 cputime=14.825 memavail=507880 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 380.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4993 bytes_read=51692 bytes_retransmit=9 bytes_invalid=0 send_seq=549 receive_seq=549 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001937 Octopus: temp=23.0 raspberry_pi: temp=39.7 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.42 cputime=14.842 memavail=507700 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 381.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4999 bytes_read=51840 bytes_retransmit=9 bytes_invalid=0 send_seq=550 receive_seq=550 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001941 Octopus: temp=23.1 raspberry_pi: temp=40.2 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.42 cputime=14.863 memavail=507448 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 382.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5005 bytes_read=52017 bytes_retransmit=9 bytes_invalid=0 send_seq=551 receive_seq=551 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001946 Octopus: temp=22.9 raspberry_pi: temp=39.7 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.42 cputime=14.895 memavail=507448 print_time=217.848 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 705.7: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6986 bytes_read=105337 bytes_retransmit=9 bytes_invalid=0 send_seq=880 receive_seq=880 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002064 Octopus: temp=23.0 raspberry_pi: temp=40.8 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.06 cputime=23.871 memavail=506896 print_time=601.091 buffer_time=0.301 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Attempting MCU 'mcu' reset command b'Got EOF when reading from device' webhooks client 547868621888: Disconnected Restarting printer Start printer at Fri Mar 17 13:32:11 2023 (1679059931.1 707.2) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547869001424: New connection webhooks client 547869001424: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Starting heater checks for extruder Stats 710.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3325 bytes_read=6891 bytes_retransmit=9 bytes_invalid=0 send_seq=277 receive_seq=277 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180000242 Octopus: temp=23.3 raspberry_pi: temp=41.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.06 cputime=25.383 memavail=499376 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 547869001424 webhooks: registering remote method 'reboot_machine' for connection id: 547869001424 webhooks: registering remote method 'pause_job_queue' for connection id: 547869001424 webhooks: registering remote method 'start_job_queue' for connection id: 547869001424 Stats 711.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3331 bytes_read=7068 bytes_retransmit=9 bytes_invalid=0 send_seq=278 receive_seq=278 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001463 Octopus: temp=23.2 raspberry_pi: temp=41.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.05 cputime=25.442 memavail=497860 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 712.5: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3337 bytes_read=7246 bytes_retransmit=9 bytes_invalid=0 send_seq=279 receive_seq=279 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002266 Octopus: temp=23.2 raspberry_pi: temp=41.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.05 cputime=25.506 memavail=495176 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 713.6: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3343 bytes_read=7394 bytes_retransmit=9 bytes_invalid=0 send_seq=280 receive_seq=280 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002161 Octopus: temp=23.2 raspberry_pi: temp=41.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.05 cputime=25.522 memavail=495176 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 714.6: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3349 bytes_read=7571 bytes_retransmit=9 bytes_invalid=0 send_seq=281 receive_seq=281 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001992 Octopus: temp=23.3 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.05 cputime=25.539 memavail=496876 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 715.6: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3355 bytes_read=7734 bytes_retransmit=9 bytes_invalid=0 send_seq=282 receive_seq=282 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002237 Octopus: temp=23.4 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.05 cputime=25.555 memavail=496940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 716.6: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3361 bytes_read=7882 bytes_retransmit=9 bytes_invalid=0 send_seq=283 receive_seq=283 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002128 Octopus: temp=23.2 raspberry_pi: temp=41.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.05 cputime=25.572 memavail=502600 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 717.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3367 bytes_read=8073 bytes_retransmit=9 bytes_invalid=0 send_seq=284 receive_seq=284 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002023 Octopus: temp=23.3 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.05 cputime=25.594 memavail=502612 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 718.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3373 bytes_read=8236 bytes_retransmit=9 bytes_invalid=0 send_seq=285 receive_seq=285 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002177 Octopus: temp=23.3 raspberry_pi: temp=40.8 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.05 cputime=25.625 memavail=502612 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 719.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3379 bytes_read=8384 bytes_retransmit=9 bytes_invalid=0 send_seq=286 receive_seq=286 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002273 Octopus: temp=23.4 raspberry_pi: temp=41.3 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.05 cputime=25.656 memavail=502368 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 720.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3385 bytes_read=8561 bytes_retransmit=9 bytes_invalid=0 send_seq=287 receive_seq=287 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002339 Octopus: temp=23.3 raspberry_pi: temp=40.8 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.05 cputime=25.688 memavail=502368 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 721.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3391 bytes_read=8724 bytes_retransmit=9 bytes_invalid=0 send_seq=288 receive_seq=288 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002349 Octopus: temp=23.4 raspberry_pi: temp=40.8 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.04 cputime=25.712 memavail=505204 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 722.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3397 bytes_read=8872 bytes_retransmit=9 bytes_invalid=0 send_seq=289 receive_seq=289 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002237 Octopus: temp=23.4 raspberry_pi: temp=40.8 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.04 cputime=25.728 memavail=505372 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 723.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3403 bytes_read=9063 bytes_retransmit=9 bytes_invalid=0 send_seq=290 receive_seq=290 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002251 Octopus: temp=23.4 raspberry_pi: temp=40.8 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.04 cputime=25.745 memavail=505120 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 724.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3409 bytes_read=9226 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002199 Octopus: temp=23.3 raspberry_pi: temp=41.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.04 cputime=25.762 memavail=505120 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 725.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3415 bytes_read=9374 bytes_retransmit=9 bytes_invalid=0 send_seq=292 receive_seq=292 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002130 Octopus: temp=23.4 raspberry_pi: temp=40.8 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.04 cputime=25.778 memavail=505128 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 726.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3421 bytes_read=9551 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002104 Octopus: temp=23.5 raspberry_pi: temp=40.8 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.04 cputime=25.802 memavail=504344 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 727.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3427 bytes_read=9714 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002085 Octopus: temp=23.5 raspberry_pi: temp=41.3 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.04 cputime=25.821 memavail=502616 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 728.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3433 bytes_read=9876 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002073 Octopus: temp=23.6 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.04 cputime=25.837 memavail=502616 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 729.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3439 bytes_read=10053 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002057 Octopus: temp=23.4 raspberry_pi: temp=40.8 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.04 cputime=25.855 memavail=502624 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 730.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3445 bytes_read=10216 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002063 Octopus: temp=23.4 raspberry_pi: temp=41.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.04 cputime=25.872 memavail=500916 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 731.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3451 bytes_read=10355 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002051 Octopus: temp=23.4 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.04 cputime=25.889 memavail=505272 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 732.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3457 bytes_read=10525 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002036 Octopus: temp=23.5 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.04 cputime=25.920 memavail=505392 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 733.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3463 bytes_read=10702 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002087 Octopus: temp=23.4 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.04 cputime=25.952 memavail=505392 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 734.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3475 bytes_read=10866 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002145 Octopus: temp=23.4 raspberry_pi: temp=41.3 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.04 cputime=25.982 memavail=505140 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 735.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3481 bytes_read=11043 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002181 Octopus: temp=23.5 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.04 cputime=26.013 memavail=504888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 736.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3487 bytes_read=11206 bytes_retransmit=9 bytes_invalid=0 send_seq=304 receive_seq=304 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002154 Octopus: temp=23.5 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.038 memavail=503908 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 737.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3493 bytes_read=11354 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002150 Octopus: temp=23.5 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.055 memavail=502424 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 738.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3499 bytes_read=11545 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002133 Octopus: temp=23.6 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.073 memavail=500952 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 739.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3505 bytes_read=11708 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002125 Octopus: temp=23.4 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.090 memavail=500712 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 740.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3511 bytes_read=11856 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002112 Octopus: temp=23.6 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.107 memavail=500712 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 741.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3517 bytes_read=12033 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002127 Octopus: temp=23.7 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.131 memavail=505104 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 742.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3523 bytes_read=12196 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002152 Octopus: temp=23.6 raspberry_pi: temp=41.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.03 cputime=26.161 memavail=504852 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 743.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3529 bytes_read=12358 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002157 Octopus: temp=23.6 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.192 memavail=504852 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 744.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3535 bytes_read=12535 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002167 Octopus: temp=23.5 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.223 memavail=504600 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 745.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3541 bytes_read=12698 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002173 Octopus: temp=23.6 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.252 memavail=504600 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 746.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3547 bytes_read=12846 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002151 Octopus: temp=23.6 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.277 memavail=504244 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 747.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3553 bytes_read=13023 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002130 Octopus: temp=23.6 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.295 memavail=502344 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 748.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3559 bytes_read=13200 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002124 Octopus: temp=23.6 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.311 memavail=502344 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 749.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3565 bytes_read=13348 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002107 Octopus: temp=23.6 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.327 memavail=502344 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 750.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3571 bytes_read=13525 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002100 Octopus: temp=23.7 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.345 memavail=500888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 751.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3577 bytes_read=13688 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002110 Octopus: temp=23.6 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.368 memavail=505360 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 752.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3583 bytes_read=13836 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002143 Octopus: temp=23.7 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.397 memavail=504856 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 753.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3589 bytes_read=14027 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002153 Octopus: temp=23.6 raspberry_pi: temp=41.3 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.03 cputime=26.428 memavail=504856 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 754.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3595 bytes_read=14190 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002160 Octopus: temp=23.5 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.03 cputime=26.458 memavail=504856 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 755.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3601 bytes_read=14328 bytes_retransmit=9 bytes_invalid=0 send_seq=323 receive_seq=323 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002169 Octopus: temp=23.6 raspberry_pi: temp=41.3 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.03 cputime=26.488 memavail=504864 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 756.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3607 bytes_read=14498 bytes_retransmit=9 bytes_invalid=0 send_seq=324 receive_seq=324 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002167 Octopus: temp=23.6 raspberry_pi: temp=40.8 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.02 cputime=26.517 memavail=504996 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 757.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3613 bytes_read=14661 bytes_retransmit=9 bytes_invalid=0 send_seq=325 receive_seq=325 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002166 Octopus: temp=23.6 raspberry_pi: temp=41.3 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.02 cputime=26.546 memavail=505548 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 758.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3619 bytes_read=14823 bytes_retransmit=9 bytes_invalid=0 send_seq=326 receive_seq=326 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002164 Octopus: temp=23.8 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.02 cputime=26.577 memavail=505044 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 759.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3625 bytes_read=15000 bytes_retransmit=9 bytes_invalid=0 send_seq=327 receive_seq=327 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002170 Octopus: temp=23.6 raspberry_pi: temp=40.8 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.02 cputime=26.604 memavail=501796 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 760.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3631 bytes_read=15163 bytes_retransmit=9 bytes_invalid=0 send_seq=328 receive_seq=328 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002153 Octopus: temp=23.6 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.02 cputime=26.621 memavail=501808 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 761.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3637 bytes_read=15311 bytes_retransmit=9 bytes_invalid=0 send_seq=329 receive_seq=329 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002156 Octopus: temp=23.8 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=26.637 memavail=504616 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 762.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3643 bytes_read=15488 bytes_retransmit=9 bytes_invalid=0 send_seq=330 receive_seq=330 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002145 Octopus: temp=23.7 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=26.654 memavail=504748 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 763.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3649 bytes_read=15665 bytes_retransmit=9 bytes_invalid=0 send_seq=331 receive_seq=331 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002129 Octopus: temp=23.7 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=26.670 memavail=504496 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 764.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3655 bytes_read=15813 bytes_retransmit=9 bytes_invalid=0 send_seq=332 receive_seq=332 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002119 Octopus: temp=23.7 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=26.689 memavail=504252 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 765.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3661 bytes_read=15990 bytes_retransmit=9 bytes_invalid=0 send_seq=333 receive_seq=333 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002124 Octopus: temp=23.7 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=26.720 memavail=504252 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 766.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3667 bytes_read=16153 bytes_retransmit=9 bytes_invalid=0 send_seq=334 receive_seq=334 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002135 Octopus: temp=23.8 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.24 cputime=26.743 memavail=505088 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 880.7: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4363 bytes_read=34968 bytes_retransmit=9 bytes_invalid=0 send_seq=450 receive_seq=450 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002070 Octopus: temp=24.3 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.36 cputime=29.304 memavail=505228 print_time=173.892 buffer_time=0.696 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 webhooks client 547869001424: Disconnected Restarting printer Start printer at Fri Mar 17 13:35:06 2023 (1679060106.4 882.5) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862384496: New connection webhooks client 547862384496: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} mcu 'mcu': got {'oid': 20, 'next_clock': 1759228928, 'value': 7412, '#name': 'analog_in_state', '#sent_time': 883.986194246, '#receive_time': 883.998156694} mcu 'mcu': got {'oid': 21, 'next_clock': 1761028928, 'value': 31563, '#name': 'analog_in_state', '#sent_time': 883.986194246, '#receive_time': 884.007093517} mcu 'mcu': got {'oid': 32, 'next_clock': 1780828928, 'value': 31590, '#name': 'analog_in_state', '#sent_time': 884.089991121, '#receive_time': 884.117407839} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 mcu 'mcu': got {'oid': 1, 'clock': 1753364147, 'query_ticks': 1316, 'next_sequence': 0, 'buffered': 0, 'fifo': 255, 'limit_count': 0, '#name': 'adxl345_status', '#sent_time': 884.256932787, '#receive_time': 884.258440339} Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Starting heater checks for extruder webhooks: registering remote method 'shutdown_machine' for connection id: 547862384496 webhooks: registering remote method 'reboot_machine' for connection id: 547862384496 webhooks: registering remote method 'pause_job_queue' for connection id: 547862384496 webhooks: registering remote method 'start_job_queue' for connection id: 547862384496 Stats 896.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3126 bytes_read=8605 bytes_retransmit=0 bytes_invalid=0 send_seq=256 receive_seq=256 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002360 Octopus: temp=24.3 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.25 cputime=31.059 memavail=503956 print_time=190.159 buffer_time=0.857 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 547862384496: Disconnected Restarting printer Start printer at Fri Mar 17 13:35:22 2023 (1679060122.7 898.8) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547861170496: New connection webhooks client 547861170496: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Starting heater checks for extruder Stats 902.1: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3335 bytes_read=6901 bytes_retransmit=9 bytes_invalid=0 send_seq=279 receive_seq=279 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001555 Octopus: temp=24.5 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.23 cputime=32.549 memavail=495264 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 547861170496 webhooks: registering remote method 'reboot_machine' for connection id: 547861170496 webhooks: registering remote method 'pause_job_queue' for connection id: 547861170496 webhooks: registering remote method 'start_job_queue' for connection id: 547861170496 Stats 903.1: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3341 bytes_read=7078 bytes_retransmit=9 bytes_invalid=0 send_seq=280 receive_seq=280 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001277 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.23 cputime=32.599 memavail=500252 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 904.1: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=3347 bytes_read=7241 bytes_retransmit=9 bytes_invalid=0 send_seq=281 receive_seq=281 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001599 Octopus: temp=24.6 raspberry_pi: temp=44.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.23 cputime=32.628 memavail=497184 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 905.1: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=3353 bytes_read=7404 bytes_retransmit=9 bytes_invalid=0 send_seq=282 receive_seq=282 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001658 Octopus: temp=24.6 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.23 cputime=32.644 memavail=497184 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 906.1: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=3359 bytes_read=7581 bytes_retransmit=9 bytes_invalid=0 send_seq=283 receive_seq=283 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001832 Octopus: temp=24.5 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.1 pwm=0.000 sysload=0.21 cputime=32.661 memavail=497184 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 907.1: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=3365 bytes_read=7729 bytes_retransmit=9 bytes_invalid=0 send_seq=284 receive_seq=284 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001809 Octopus: temp=24.6 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.21 cputime=32.684 memavail=498672 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 908.1: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=3371 bytes_read=7892 bytes_retransmit=9 bytes_invalid=0 send_seq=285 receive_seq=285 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001810 Octopus: temp=24.5 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.21 cputime=32.701 memavail=503300 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 909.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3377 bytes_read=8083 bytes_retransmit=9 bytes_invalid=0 send_seq=286 receive_seq=286 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001852 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.21 cputime=32.719 memavail=503456 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 910.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3383 bytes_read=8231 bytes_retransmit=9 bytes_invalid=0 send_seq=287 receive_seq=287 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001867 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.21 cputime=32.735 memavail=503456 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 911.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3389 bytes_read=8394 bytes_retransmit=9 bytes_invalid=0 send_seq=288 receive_seq=288 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002021 Octopus: temp=24.6 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.20 cputime=32.751 memavail=503456 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 912.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3395 bytes_read=8571 bytes_retransmit=9 bytes_invalid=0 send_seq=289 receive_seq=289 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002024 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.20 cputime=32.773 memavail=503456 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 913.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3401 bytes_read=8719 bytes_retransmit=9 bytes_invalid=0 send_seq=290 receive_seq=290 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002227 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.20 cputime=32.802 memavail=503372 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 914.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3407 bytes_read=8882 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002161 Octopus: temp=24.5 raspberry_pi: temp=42.4 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.20 cputime=32.819 memavail=503432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 915.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3413 bytes_read=9073 bytes_retransmit=9 bytes_invalid=0 send_seq=292 receive_seq=292 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002121 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.20 cputime=32.836 memavail=503432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 916.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3419 bytes_read=9236 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002109 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=32.853 memavail=503432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 917.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3425 bytes_read=9384 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002079 Octopus: temp=24.6 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=32.870 memavail=500688 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 918.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3431 bytes_read=9561 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002064 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=32.890 memavail=503396 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 919.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3437 bytes_read=9724 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002106 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=32.921 memavail=502892 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 920.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3443 bytes_read=9886 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002162 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=32.952 memavail=502892 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 921.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3449 bytes_read=10063 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002182 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=32.984 memavail=502892 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 922.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3455 bytes_read=10226 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002233 Octopus: temp=24.5 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=33.015 memavail=502892 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 923.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3461 bytes_read=10365 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002263 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=33.044 memavail=503276 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 924.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3467 bytes_read=10535 bytes_retransmit=9 bytes_invalid=0 send_seq=301 receive_seq=301 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002229 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=33.059 memavail=502888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 925.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3473 bytes_read=10712 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002203 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=33.076 memavail=502888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 926.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3479 bytes_read=10860 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002257 Octopus: temp=24.5 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.15 cputime=33.093 memavail=502888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 927.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3491 bytes_read=11037 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=304 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002229 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.15 cputime=33.110 memavail=500648 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 928.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3497 bytes_read=11216 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002173 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.15 cputime=33.127 memavail=503284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 929.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3503 bytes_read=11364 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002203 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.15 cputime=33.158 memavail=503036 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 930.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3509 bytes_read=11555 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002223 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.15 cputime=33.189 memavail=503036 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 931.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3515 bytes_read=11718 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002226 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.14 cputime=33.220 memavail=502784 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 932.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3521 bytes_read=11866 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002243 Octopus: temp=24.8 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.14 cputime=33.250 memavail=502784 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 933.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3527 bytes_read=12043 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002243 Octopus: temp=24.8 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.14 cputime=33.281 memavail=502856 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 934.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3533 bytes_read=12206 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002216 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.14 cputime=33.298 memavail=503016 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 935.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3539 bytes_read=12368 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002199 Octopus: temp=24.8 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.14 cputime=33.314 memavail=503016 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 936.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3545 bytes_read=12545 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002186 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.13 cputime=33.331 memavail=502764 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 937.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3551 bytes_read=12708 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002171 Octopus: temp=24.7 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.13 cputime=33.348 memavail=503416 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 938.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3557 bytes_read=12856 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002157 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.13 cputime=33.364 memavail=503156 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 939.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3563 bytes_read=13033 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002165 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.13 cputime=33.395 memavail=503212 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 940.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3569 bytes_read=13210 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002194 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.13 cputime=33.427 memavail=502960 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 941.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3575 bytes_read=13358 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002191 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.12 cputime=33.457 memavail=502960 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 942.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3581 bytes_read=13535 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002195 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.12 cputime=33.489 memavail=502712 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 943.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3587 bytes_read=13698 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002211 Octopus: temp=24.8 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.12 cputime=33.519 memavail=503152 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 944.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3593 bytes_read=13846 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002217 Octopus: temp=24.5 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.12 cputime=33.548 memavail=503236 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 945.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3599 bytes_read=14037 bytes_retransmit=9 bytes_invalid=0 send_seq=323 receive_seq=323 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002212 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.12 cputime=33.580 memavail=503236 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 946.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3605 bytes_read=14200 bytes_retransmit=9 bytes_invalid=0 send_seq=324 receive_seq=324 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002208 Octopus: temp=24.8 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.11 cputime=33.611 memavail=503236 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 947.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3611 bytes_read=14338 bytes_retransmit=9 bytes_invalid=0 send_seq=325 receive_seq=325 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002209 Octopus: temp=24.8 raspberry_pi: temp=41.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.11 cputime=33.641 memavail=500240 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 948.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3617 bytes_read=14508 bytes_retransmit=9 bytes_invalid=0 send_seq=326 receive_seq=326 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002189 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.11 cputime=33.658 memavail=503220 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 949.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3623 bytes_read=14671 bytes_retransmit=9 bytes_invalid=0 send_seq=327 receive_seq=327 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002177 Octopus: temp=24.6 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.11 cputime=33.675 memavail=502968 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 950.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3629 bytes_read=14833 bytes_retransmit=9 bytes_invalid=0 send_seq=328 receive_seq=328 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002164 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.11 cputime=33.691 memavail=502976 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 951.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3635 bytes_read=15010 bytes_retransmit=9 bytes_invalid=0 send_seq=329 receive_seq=329 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002151 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.10 cputime=33.708 memavail=502976 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 952.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3641 bytes_read=15173 bytes_retransmit=9 bytes_invalid=0 send_seq=330 receive_seq=330 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002141 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.10 cputime=33.726 memavail=502976 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 953.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3647 bytes_read=15321 bytes_retransmit=9 bytes_invalid=0 send_seq=331 receive_seq=331 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002156 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.10 cputime=33.756 memavail=503000 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 954.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3653 bytes_read=15498 bytes_retransmit=9 bytes_invalid=0 send_seq=332 receive_seq=332 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002144 Octopus: temp=24.8 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.10 cputime=33.772 memavail=503220 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 955.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3659 bytes_read=15675 bytes_retransmit=9 bytes_invalid=0 send_seq=333 receive_seq=333 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002131 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.10 cputime=33.789 memavail=503220 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 956.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3665 bytes_read=15823 bytes_retransmit=9 bytes_invalid=0 send_seq=334 receive_seq=334 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002122 Octopus: temp=24.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.09 cputime=33.805 memavail=503220 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 957.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3671 bytes_read=16000 bytes_retransmit=9 bytes_invalid=0 send_seq=335 receive_seq=335 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002113 Octopus: temp=24.7 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.09 cputime=33.822 memavail=500744 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 958.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3677 bytes_read=16163 bytes_retransmit=9 bytes_invalid=0 send_seq=336 receive_seq=336 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002106 Octopus: temp=24.7 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.09 cputime=33.840 memavail=503180 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 2254.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=11573 bytes_read=229988 bytes_retransmit=9 bytes_invalid=0 send_seq=1652 receive_seq=1652 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002019 Octopus: temp=26.3 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.1 pwm=0.000 sysload=0.13 cputime=62.865 memavail=500756 print_time=1355.168 buffer_time=0.095 print_stall=0 extruder: target=0 temp=20.2 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 547861170496: Disconnected Restarting printer Start printer at Fri Mar 17 13:57:59 2023 (1679061479.3 2255.4) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 pin = PD12 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 ======================= Extruder max_extrude_ratio=0.266081 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 145, in _read_config pconfig.check_unused_options(config) File "/home/pi/klipper/klippy/configfile.py", line 304, in check_unused_options raise error("Option '%s' is not valid in section '%s'" configparser.Error: Option 'pin' is not valid in section 'heater_bed' webhooks client 547861081584: New connection webhooks client 547861081584: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Attempting MCU 'mcu' reset webhooks client 547861081584: Disconnected Restarting printer Start printer at Fri Mar 17 13:59:41 2023 (1679061581.6 2357.7) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 pin = PD12 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 ======================= Extruder max_extrude_ratio=0.266081 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 145, in _read_config pconfig.check_unused_options(config) File "/home/pi/klipper/klippy/configfile.py", line 304, in check_unused_options raise error("Option '%s' is not valid in section '%s'" configparser.Error: Option 'pin' is not valid in section 'heater_bed' webhooks client 547862137008: New connection webhooks client 547862137008: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Attempting MCU 'mcu' reset webhooks client 547862137008: Disconnected Restarting printer Start printer at Fri Mar 17 14:02:15 2023 (1679061735.4 2511.5) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PD12 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547868076064: New connection webhooks client 547868076064: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 692, in _send_config cmdlist[i] = pin_resolver.update_command(cmd) File "/home/pi/klipper/klippy/pins.py", line 53, in update_command return re_pin.sub(pin_fixup, cmd) File "/home/pi/klipper/klippy/pins.py", line 47, in pin_fixup raise error("pin %s is an alias for %s" % ( pins.error: pin PD12 is an alias for fan_controller_board_pin Attempting MCU 'mcu' reset command webhooks client 547868076064: Disconnected Restarting printer Start printer at Fri Mar 17 14:04:15 2023 (1679061855.8 2631.9) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = 4P max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547861170736: New connection webhooks client 547861170736: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/mcu.py", line 707, in _send_config self._serial.send(c) File "/home/pi/klipper/klippy/serialhdl.py", line 256, in send cmd = self.msgparser.create_command(msg) File "/home/pi/klipper/klippy/msgproto.py", line 350, in create_command cmd = mp.encode_by_name(**argparts) File "/home/pi/klipper/klippy/msgproto.py", line 181, in encode_by_name t.encode(out, params[name]) File "/home/pi/klipper/klippy/msgproto.py", line 108, in encode raise enumeration_error(self.enum_name, v) msgproto.enumeration_error: Unknown value '4P' in enumeration 'pin' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 718, in _send_config raise self._printer.config_error( configparser.Error: Pin '4P' is not a valid pin name on mcu 'mcu' Attempting MCU 'mcu' reset command webhooks client 547861170736: Disconnected Restarting printer Start printer at Fri Mar 17 14:04:30 2023 (1679061870.7 2646.8) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = 4P max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547843937376: New connection webhooks client 547843937376: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/mcu.py", line 707, in _send_config self._serial.send(c) File "/home/pi/klipper/klippy/serialhdl.py", line 256, in send cmd = self.msgparser.create_command(msg) File "/home/pi/klipper/klippy/msgproto.py", line 350, in create_command cmd = mp.encode_by_name(**argparts) File "/home/pi/klipper/klippy/msgproto.py", line 181, in encode_by_name t.encode(out, params[name]) File "/home/pi/klipper/klippy/msgproto.py", line 108, in encode raise enumeration_error(self.enum_name, v) msgproto.enumeration_error: Unknown value '4P' in enumeration 'pin' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 718, in _send_config raise self._printer.config_error( configparser.Error: Pin '4P' is not a valid pin name on mcu 'mcu' Attempting MCU 'mcu' reset command webhooks client 547843937376: Disconnected Restarting printer Start printer at Fri Mar 17 14:05:53 2023 (1679061953.8 2729.9) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = 4p_controller_board_pin max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862286240: New connection webhooks client 547862286240: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/mcu.py", line 707, in _send_config self._serial.send(c) File "/home/pi/klipper/klippy/serialhdl.py", line 256, in send cmd = self.msgparser.create_command(msg) File "/home/pi/klipper/klippy/msgproto.py", line 350, in create_command cmd = mp.encode_by_name(**argparts) File "/home/pi/klipper/klippy/msgproto.py", line 181, in encode_by_name t.encode(out, params[name]) File "/home/pi/klipper/klippy/msgproto.py", line 108, in encode raise enumeration_error(self.enum_name, v) msgproto.enumeration_error: Unknown value '4p_controller_board_pin' in enumeration 'pin' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 718, in _send_config raise self._printer.config_error( configparser.Error: Pin '4p_controller_board_pin' is not a valid pin name on mcu 'mcu' Attempting MCU 'mcu' reset command b'Got EOF when reading from device' webhooks client 547862286240: Disconnected Restarting printer Start printer at Fri Mar 17 14:07:44 2023 (1679062064.9 2841.0) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = 4p_controller_board_pin max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862322672: New connection webhooks client 547862322672: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/mcu.py", line 707, in _send_config self._serial.send(c) File "/home/pi/klipper/klippy/serialhdl.py", line 256, in send cmd = self.msgparser.create_command(msg) File "/home/pi/klipper/klippy/msgproto.py", line 350, in create_command cmd = mp.encode_by_name(**argparts) File "/home/pi/klipper/klippy/msgproto.py", line 181, in encode_by_name t.encode(out, params[name]) File "/home/pi/klipper/klippy/msgproto.py", line 108, in encode raise enumeration_error(self.enum_name, v) msgproto.enumeration_error: Unknown value '4p_controller_board_pin' in enumeration 'pin' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 718, in _send_config raise self._printer.config_error( configparser.Error: Pin '4p_controller_board_pin' is not a valid pin name on mcu 'mcu' Attempting MCU 'mcu' reset command webhooks client 547862322672: Disconnected Restarting printer Start printer at Fri Mar 17 14:08:22 2023 (1679062102.7 2878.8) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = fan_controller_board_pin max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= 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/controller_fan.py", line 71, in load_config_prefix return ControllerFan(config) File "/home/pi/klipper/klippy/extras/controller_fan.py", line 20, in __init__ self.fan = fan.Fan(config) File "/home/pi/klipper/klippy/extras/fan.py", line 27, in __init__ self.mcu_fan = ppins.setup_pin('pwm', config.get('pin')) File "/home/pi/klipper/klippy/pins.py", line 117, in setup_pin pin_params = self.lookup_pin(pin_desc, can_invert, can_pullup) File "/home/pi/klipper/klippy/pins.py", line 106, in lookup_pin raise error("pin %s used multiple times in config" % (pin,)) pins.error: pin fan_controller_board_pin used multiple times in config webhooks client 547862308752: New connection webhooks client 547862308752: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Attempting MCU 'mcu' reset webhooks client 547862308752: Disconnected Restarting printer Start printer at Fri Mar 17 14:17:22 2023 (1679062642.7 3418.8) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PA_8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547844200720: New connection webhooks client 547844200720: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/mcu.py", line 707, in _send_config self._serial.send(c) File "/home/pi/klipper/klippy/serialhdl.py", line 256, in send cmd = self.msgparser.create_command(msg) File "/home/pi/klipper/klippy/msgproto.py", line 350, in create_command cmd = mp.encode_by_name(**argparts) File "/home/pi/klipper/klippy/msgproto.py", line 181, in encode_by_name t.encode(out, params[name]) File "/home/pi/klipper/klippy/msgproto.py", line 108, in encode raise enumeration_error(self.enum_name, v) msgproto.enumeration_error: Unknown value 'PA_8' in enumeration 'pin' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 718, in _send_config raise self._printer.config_error( configparser.Error: Pin 'PA_8' is not a valid pin name on mcu 'mcu' Attempting MCU 'mcu' reset command webhooks client 547844200720: Disconnected Restarting printer Start printer at Fri Mar 17 14:18:00 2023 (1679062680.8 3456.9) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PA8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862309808: New connection webhooks client 547862309808: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 692, in _send_config cmdlist[i] = pin_resolver.update_command(cmd) File "/home/pi/klipper/klippy/pins.py", line 53, in update_command return re_pin.sub(pin_fixup, cmd) File "/home/pi/klipper/klippy/pins.py", line 47, in pin_fixup raise error("pin %s is an alias for %s" % ( pins.error: pin PA8 is an alias for fan_part_cooling_pin Attempting MCU 'mcu' reset command webhooks client 547862309808: Disconnected Restarting printer Start printer at Fri Mar 17 14:21:47 2023 (1679062907.7 3683.8) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PA8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547868873200: New connection webhooks client 547868873200: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 692, in _send_config cmdlist[i] = pin_resolver.update_command(cmd) File "/home/pi/klipper/klippy/pins.py", line 53, in update_command return re_pin.sub(pin_fixup, cmd) File "/home/pi/klipper/klippy/pins.py", line 47, in pin_fixup raise error("pin %s is an alias for %s" % ( pins.error: pin PA8 is an alias for fan_part_cooling_pin Attempting MCU 'mcu' reset command webhooks client 547868873200: Disconnected Restarting printer Start printer at Fri Mar 17 14:23:02 2023 (1679062982.7 3758.8) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PD12 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547868866448: New connection webhooks client 547868866448: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 692, in _send_config cmdlist[i] = pin_resolver.update_command(cmd) File "/home/pi/klipper/klippy/pins.py", line 53, in update_command return re_pin.sub(pin_fixup, cmd) File "/home/pi/klipper/klippy/pins.py", line 47, in pin_fixup raise error("pin %s is an alias for %s" % ( pins.error: pin PD12 is an alias for fan_controller_board_pin Attempting MCU 'mcu' reset command webhooks client 547868866448: Disconnected Restarting printer Start printer at Fri Mar 17 14:28:46 2023 (1679063326.4 4102.5) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PD12 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862313856: New connection webhooks client 547862313856: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 692, in _send_config cmdlist[i] = pin_resolver.update_command(cmd) File "/home/pi/klipper/klippy/pins.py", line 53, in update_command return re_pin.sub(pin_fixup, cmd) File "/home/pi/klipper/klippy/pins.py", line 47, in pin_fixup raise error("pin %s is an alias for %s" % ( pins.error: pin PD12 is an alias for fan_controller_board_pin webhooks client 547862313856: Disconnected Restarting printer Start printer at Fri Mar 17 14:28:55 2023 (1679063335.6 4111.7) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PD12 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547868876032: New connection webhooks client 547868876032: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 692, in _send_config cmdlist[i] = pin_resolver.update_command(cmd) File "/home/pi/klipper/klippy/pins.py", line 53, in update_command return re_pin.sub(pin_fixup, cmd) File "/home/pi/klipper/klippy/pins.py", line 47, in pin_fixup raise error("pin %s is an alias for %s" % ( pins.error: pin PD12 is an alias for fan_controller_board_pin Attempting MCU 'mcu' reset command webhooks client 547868876032: Disconnected Restarting printer Start printer at Fri Mar 17 14:31:50 2023 (1679063510.2 4286.3) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [multi_pin my_controller_fan_pins] pins = PD12, PD13 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 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 145, in _read_config pconfig.check_unused_options(config) File "/home/pi/klipper/klippy/configfile.py", line 304, in check_unused_options raise error("Option '%s' is not valid in section '%s'" configparser.Error: Option 'max_power' is not valid in section 'multi_pin my_controller_fan_pins' webhooks client 547862310240: New connection webhooks client 547862310240: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Attempting MCU 'mcu' reset webhooks client 547862310240: Disconnected Restarting printer Start printer at Fri Mar 17 14:32:46 2023 (1679063566.7 4342.8) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [multi_pin my_controller_fan_pins] pins = PD12, PD13 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 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 145, in _read_config pconfig.check_unused_options(config) File "/home/pi/klipper/klippy/configfile.py", line 304, in check_unused_options raise error("Option '%s' is not valid in section '%s'" configparser.Error: Option 'shutdown_speed' is not valid in section 'multi_pin my_controller_fan_pins' webhooks client 547862285280: New connection webhooks client 547862285280: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Attempting MCU 'mcu' reset webhooks client 547862285280: Disconnected Restarting printer Start printer at Fri Mar 17 14:42:40 2023 (1679064160.7 4936.8) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = P2.3 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862083568: New connection webhooks client 547862083568: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/mcu.py", line 707, in _send_config self._serial.send(c) File "/home/pi/klipper/klippy/serialhdl.py", line 256, in send cmd = self.msgparser.create_command(msg) File "/home/pi/klipper/klippy/msgproto.py", line 350, in create_command cmd = mp.encode_by_name(**argparts) File "/home/pi/klipper/klippy/msgproto.py", line 181, in encode_by_name t.encode(out, params[name]) File "/home/pi/klipper/klippy/msgproto.py", line 108, in encode raise enumeration_error(self.enum_name, v) msgproto.enumeration_error: Unknown value 'P2.3' in enumeration 'pin' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/mcu.py", line 753, in _connect self._send_config(None) File "/home/pi/klipper/klippy/mcu.py", line 718, in _send_config raise self._printer.config_error( configparser.Error: Pin 'P2.3' is not a valid pin name on mcu 'mcu' Attempting MCU 'mcu' reset command webhooks client 547862083568: Disconnected Restarting printer Start printer at Fri Mar 17 14:46:12 2023 (1679064372.2 5148.3) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PC8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862382672: New connection webhooks client 547862382672: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/extras/controller_fan.py", line 32, in handle_connect self.heaters = [pheaters.lookup_heater(n) for n in self.heater_names] File "/home/pi/klipper/klippy/extras/controller_fan.py", line 32, in self.heaters = [pheaters.lookup_heater(n) for n in self.heater_names] File "/home/pi/klipper/klippy/extras/heaters.py", line 273, in lookup_heater raise self.printer.config_error( configparser.Error: Unknown heater '"extruder"' Attempting MCU 'mcu' reset command b'Got EOF when reading from device' webhooks client 547862382672: Disconnected Restarting printer Start printer at Fri Mar 17 14:46:34 2023 (1679064395.0 5171.1) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PC8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = "extruder" stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547869309200: New connection webhooks client 547869309200: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/extras/controller_fan.py", line 32, in handle_connect self.heaters = [pheaters.lookup_heater(n) for n in self.heater_names] File "/home/pi/klipper/klippy/extras/controller_fan.py", line 32, in self.heaters = [pheaters.lookup_heater(n) for n in self.heater_names] File "/home/pi/klipper/klippy/extras/heaters.py", line 273, in lookup_heater raise self.printer.config_error( configparser.Error: Unknown heater '"extruder"' Attempting MCU 'mcu' reset command webhooks client 547869309200: Disconnected Restarting printer Start printer at Fri Mar 17 14:56:43 2023 (1679065003.9 5780.0) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PC8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = lgx-lite stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547868999792: New connection webhooks client 547868999792: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/extras/controller_fan.py", line 32, in handle_connect self.heaters = [pheaters.lookup_heater(n) for n in self.heater_names] File "/home/pi/klipper/klippy/extras/controller_fan.py", line 32, in self.heaters = [pheaters.lookup_heater(n) for n in self.heater_names] File "/home/pi/klipper/klippy/extras/heaters.py", line 273, in lookup_heater raise self.printer.config_error( configparser.Error: Unknown heater 'lgx-lite' Attempting MCU 'mcu' reset command webhooks client 547868999792: Disconnected Restarting printer Start printer at Fri Mar 17 14:57:51 2023 (1679065071.9 5848.0) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PC8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = extruder/lgx-lite stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862249280: New connection webhooks client 547862249280: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/extras/controller_fan.py", line 32, in handle_connect self.heaters = [pheaters.lookup_heater(n) for n in self.heater_names] File "/home/pi/klipper/klippy/extras/controller_fan.py", line 32, in self.heaters = [pheaters.lookup_heater(n) for n in self.heater_names] File "/home/pi/klipper/klippy/extras/heaters.py", line 273, in lookup_heater raise self.printer.config_error( configparser.Error: Unknown heater 'extruder/lgx-lite' Attempting MCU 'mcu' reset command webhooks client 547862249280: Disconnected Restarting printer Start printer at Fri Mar 17 14:58:30 2023 (1679065110.2 5886.3) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PC8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = extruder stepper = 42sth48-2504ac/2209/24v-1.1a-x, 42sth48-2504ac/2209/24v-1.1a-y, 42sth48-2504ac/2209/24v-1.1a-z, 42sth48-2504ac/2209/24v-1.1a-z1, 42sth48-2504ac/2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547868872768: New connection webhooks client 547868872768: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/extras/controller_fan.py", line 39, in handle_connect raise self.printer.config_error( configparser.Error: One or more of these steppers are unknown: ('42sth48-2504ac/2209/24v-1.1a-x', '42sth48-2504ac/2209/24v-1.1a-y', '42sth48-2504ac/2209/24v-1.1a-z', '42sth48-2504ac/2209/24v-1.1a-z1', '42sth48-2504ac/2209/24v-1.1a-z2') (valid steppers are: stepper_x, stepper_y, stepper_z, stepper_z1, stepper_z2, extruder) Attempting MCU 'mcu' reset command webhooks client 547868872768: Disconnected Restarting printer Start printer at Fri Mar 17 14:59:50 2023 (1679065190.3 5966.4) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PC8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = extruder stepper = 2209/24v-1.1a-x, 2209/24v-1.1a-y, 2209/24v-1.1a-z, 2209/24v-1.1a-z1, 2209/24v-1.1a-z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547844190016: New connection webhooks client 547844190016: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Config error Traceback (most recent call last): File "/home/pi/klipper/klippy/klippy.py", line 180, in _connect cb() File "/home/pi/klipper/klippy/extras/controller_fan.py", line 39, in handle_connect raise self.printer.config_error( configparser.Error: One or more of these steppers are unknown: ('2209/24v-1.1a-x', '2209/24v-1.1a-y', '2209/24v-1.1a-z', '2209/24v-1.1a-z1', '2209/24v-1.1a-z2') (valid steppers are: stepper_x, stepper_y, stepper_z, stepper_z1, stepper_z2, extruder) Attempting MCU 'mcu' reset command webhooks client 547844190016: Disconnected Restarting printer Start printer at Fri Mar 17 15:02:34 2023 (1679065354.7 6130.8) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PC8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = extruder stepper = stepper_x, stepper_y, stepper_z, stepper_z1, stepper_z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547861897760: New connection webhooks client 547861897760: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Starting heater checks for extruder Stats 6134.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3385 bytes_read=6800 bytes_retransmit=9 bytes_invalid=0 send_seq=285 receive_seq=285 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=179999808 Octopus: temp=0.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=0.0 pwm=0.000 sysload=0.19 cputime=131.972 memavail=492220 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 547861897760 webhooks: registering remote method 'reboot_machine' for connection id: 547861897760 webhooks: registering remote method 'pause_job_queue' for connection id: 547861897760 webhooks: registering remote method 'start_job_queue' for connection id: 547861897760 Stats 6135.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3391 bytes_read=6948 bytes_retransmit=9 bytes_invalid=0 send_seq=286 receive_seq=286 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180000973 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=132.025 memavail=491472 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6136.2: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3397 bytes_read=7140 bytes_retransmit=9 bytes_invalid=0 send_seq=287 receive_seq=287 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001127 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=132.060 memavail=487836 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6137.2: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3403 bytes_read=7303 bytes_retransmit=9 bytes_invalid=0 send_seq=288 receive_seq=288 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001314 Octopus: temp=26.1 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=132.077 memavail=487800 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6138.2: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3409 bytes_read=7451 bytes_retransmit=9 bytes_invalid=0 send_seq=289 receive_seq=289 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001511 Octopus: temp=26.2 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=132.094 memavail=487800 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6139.2: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3415 bytes_read=7628 bytes_retransmit=9 bytes_invalid=0 send_seq=290 receive_seq=290 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001584 Octopus: temp=26.1 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=132.111 memavail=491500 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6140.2: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3421 bytes_read=7791 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001687 Octopus: temp=26.2 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=132.128 memavail=496260 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6141.2: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3427 bytes_read=7939 bytes_retransmit=9 bytes_invalid=0 send_seq=292 receive_seq=292 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001745 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=132.145 memavail=496280 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6142.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3433 bytes_read=8130 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001945 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=132.177 memavail=496280 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6143.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3439 bytes_read=8293 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002116 Octopus: temp=26.1 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=132.207 memavail=496280 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6144.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3445 bytes_read=8441 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002274 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=132.237 memavail=496280 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6145.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3451 bytes_read=8618 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002304 Octopus: temp=26.0 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.36 cputime=132.266 memavail=496712 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6146.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3457 bytes_read=8781 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002210 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.36 cputime=132.284 memavail=493848 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6147.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3463 bytes_read=8943 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002132 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.36 cputime=132.300 memavail=493848 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6148.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3469 bytes_read=9120 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002086 Octopus: temp=26.1 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.36 cputime=132.317 memavail=493848 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6149.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3475 bytes_read=9283 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002065 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.36 cputime=132.335 memavail=493848 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6150.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3481 bytes_read=9431 bytes_retransmit=9 bytes_invalid=0 send_seq=301 receive_seq=301 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002029 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=132.354 memavail=496708 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6151.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3487 bytes_read=9608 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002069 Octopus: temp=25.9 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.1 pwm=0.000 sysload=0.34 cputime=132.385 memavail=496832 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6152.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3493 bytes_read=9785 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002108 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=132.418 memavail=496832 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6153.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3499 bytes_read=9933 bytes_retransmit=9 bytes_invalid=0 send_seq=304 receive_seq=304 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002145 Octopus: temp=26.0 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=132.448 memavail=496580 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6154.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3505 bytes_read=10110 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002168 Octopus: temp=26.0 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=132.480 memavail=496580 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6155.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3511 bytes_read=10264 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002223 Octopus: temp=25.9 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=132.509 memavail=496704 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6156.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3517 bytes_read=10405 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002187 Octopus: temp=26.0 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=132.526 memavail=494592 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6157.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3523 bytes_read=10596 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002145 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.31 cputime=132.543 memavail=496568 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6158.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3529 bytes_read=10759 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002119 Octopus: temp=25.8 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=132.560 memavail=496280 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6159.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3535 bytes_read=10907 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002094 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=132.577 memavail=496280 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6160.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3547 bytes_read=11100 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002099 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.28 cputime=132.599 memavail=496632 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6161.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3553 bytes_read=11263 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002120 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.28 cputime=132.636 memavail=496776 print_time=30.793 buffer_time=0.698 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 547861897760: Disconnected Restarting printer Start printer at Fri Mar 17 15:03:06 2023 (1679065386.9 6163.0) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PC8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = extruder stepper = stepper_x, stepper_y, stepper_z, stepper_z1, stepper_z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862381712: New connection webhooks client 547862381712: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Starting heater checks for extruder Stats 6166.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3350 bytes_read=6897 bytes_retransmit=9 bytes_invalid=0 send_seq=278 receive_seq=278 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=179999308 Octopus: temp=26.0 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=134.151 memavail=488524 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 547862381712 webhooks: registering remote method 'reboot_machine' for connection id: 547862381712 webhooks: registering remote method 'pause_job_queue' for connection id: 547862381712 webhooks: registering remote method 'start_job_queue' for connection id: 547862381712 Stats 6167.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3356 bytes_read=7074 bytes_retransmit=9 bytes_invalid=0 send_seq=279 receive_seq=279 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180000299 Octopus: temp=26.1 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=134.212 memavail=487572 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6168.4: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3362 bytes_read=7252 bytes_retransmit=9 bytes_invalid=0 send_seq=280 receive_seq=280 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180000937 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=134.242 memavail=490540 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6169.4: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3368 bytes_read=7400 bytes_retransmit=9 bytes_invalid=0 send_seq=281 receive_seq=281 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001346 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.26 cputime=134.258 memavail=490036 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6170.4: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3374 bytes_read=7577 bytes_retransmit=9 bytes_invalid=0 send_seq=282 receive_seq=282 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001713 Octopus: temp=26.1 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.24 cputime=134.275 memavail=490036 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6171.4: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3380 bytes_read=7740 bytes_retransmit=9 bytes_invalid=0 send_seq=283 receive_seq=283 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001722 Octopus: temp=26.2 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.24 cputime=134.292 memavail=493788 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6172.4: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3386 bytes_read=7888 bytes_retransmit=9 bytes_invalid=0 send_seq=284 receive_seq=284 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001749 Octopus: temp=26.0 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.1 pwm=0.000 sysload=0.24 cputime=134.311 memavail=493868 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6173.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3392 bytes_read=8079 bytes_retransmit=9 bytes_invalid=0 send_seq=285 receive_seq=285 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002040 Octopus: temp=26.1 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.24 cputime=134.340 memavail=496076 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6174.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3398 bytes_read=8242 bytes_retransmit=9 bytes_invalid=0 send_seq=286 receive_seq=286 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001944 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.24 cputime=134.357 memavail=496116 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6175.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3404 bytes_read=8390 bytes_retransmit=9 bytes_invalid=0 send_seq=287 receive_seq=287 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001937 Octopus: temp=26.0 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.22 cputime=134.374 memavail=494128 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6176.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3410 bytes_read=8567 bytes_retransmit=9 bytes_invalid=0 send_seq=288 receive_seq=288 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001944 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.22 cputime=134.391 memavail=494124 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6177.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3416 bytes_read=8730 bytes_retransmit=9 bytes_invalid=0 send_seq=289 receive_seq=289 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002240 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.22 cputime=134.408 memavail=494124 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6178.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3422 bytes_read=8878 bytes_retransmit=9 bytes_invalid=0 send_seq=290 receive_seq=290 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002165 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.22 cputime=134.432 memavail=496000 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6179.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3428 bytes_read=9069 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002216 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.22 cputime=134.465 memavail=496128 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6180.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3434 bytes_read=9232 bytes_retransmit=9 bytes_invalid=0 send_seq=292 receive_seq=292 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002267 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.20 cputime=134.497 memavail=495876 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6181.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3440 bytes_read=9380 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002295 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.20 cputime=134.528 memavail=495888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6182.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3446 bytes_read=9557 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002321 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.20 cputime=134.559 memavail=495888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6183.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3452 bytes_read=9720 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002306 Octopus: temp=26.0 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.20 cputime=134.587 memavail=496100 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6184.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3458 bytes_read=9882 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002251 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.20 cputime=134.604 memavail=496124 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6185.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3464 bytes_read=10059 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002195 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=134.619 memavail=493632 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6186.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3470 bytes_read=10222 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002150 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=134.635 memavail=493640 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6187.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3476 bytes_read=10361 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002123 Octopus: temp=26.2 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=134.652 memavail=493640 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6188.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3482 bytes_read=10531 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002088 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=134.670 memavail=496076 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6189.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3488 bytes_read=10708 bytes_retransmit=9 bytes_invalid=0 send_seq=301 receive_seq=301 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002108 Octopus: temp=25.8 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.18 cputime=134.702 memavail=496100 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6190.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3494 bytes_read=10856 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002161 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=134.733 memavail=496100 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6191.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3506 bytes_read=11049 bytes_retransmit=9 bytes_invalid=0 send_seq=304 receive_seq=304 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002198 Octopus: temp=25.9 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=134.767 memavail=495856 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6192.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3512 bytes_read=11212 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002219 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=134.800 memavail=495408 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6193.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3518 bytes_read=11360 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002189 Octopus: temp=25.8 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=134.828 memavail=495796 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6194.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3524 bytes_read=11551 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.001 rttvar=0.001 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002182 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.17 cputime=134.846 memavail=495796 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6195.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3530 bytes_read=11714 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.001 rttvar=0.001 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002148 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.32 cputime=134.863 memavail=492800 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6196.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3536 bytes_read=11862 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.001 rttvar=0.001 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002124 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.32 cputime=134.879 memavail=492800 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6197.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3542 bytes_read=12039 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.001 rttvar=0.001 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002106 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.32 cputime=134.897 memavail=492800 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6198.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3548 bytes_read=12202 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.001 rttvar=0.001 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002107 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.32 cputime=134.918 memavail=495944 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6199.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3554 bytes_read=12364 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002107 Octopus: temp=25.8 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.32 cputime=134.949 memavail=496088 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6200.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3560 bytes_read=12541 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002111 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.29 cputime=134.980 memavail=496088 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6201.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3566 bytes_read=12704 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002122 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.29 cputime=135.011 memavail=496088 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6202.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3572 bytes_read=12852 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002166 Octopus: temp=26.0 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.29 cputime=135.043 memavail=495836 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6203.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3578 bytes_read=13029 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002158 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.29 cputime=135.070 memavail=495936 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6204.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3584 bytes_read=13206 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002134 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.29 cputime=135.087 memavail=495872 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6205.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3590 bytes_read=13354 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002110 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.27 cputime=135.103 memavail=493884 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6206.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3596 bytes_read=13531 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002090 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.27 cputime=135.121 memavail=493888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6207.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3602 bytes_read=13694 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002074 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.27 cputime=135.138 memavail=493888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6208.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3608 bytes_read=13842 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002061 Octopus: temp=26.2 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.27 cputime=135.158 memavail=496116 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6209.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3614 bytes_read=14033 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002067 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.27 cputime=135.196 memavail=496152 print_time=46.649 buffer_time=0.563 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 webhooks client 547862381712: Disconnected Restarting printer Start printer at Fri Mar 17 15:03:54 2023 (1679065435.0 6211.1) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 [controller_fan my_controller_fan] pin = PC8 max_power = 1.0 shutdown_speed = 0 cycle_time = 0.010 hardware_pwm = False kick_start_time = 0.100 off_below = 0.0 fan_speed = 1.0 idle_timeout = 30 idle_speed = 1.0 heater = extruder stepper = stepper_x, stepper_y, stepper_z, stepper_z1, stepper_z2 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547844141888: New connection webhooks client 547844141888: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} mcu 'mcu': got {'oid': 33, 'next_clock': 307465408, 'value': 31585, '#name': 'analog_in_state', '#sent_time': 6212.425724088, '#receive_time': 6212.464276328} mcu 'mcu': got {'oid': 20, 'next_clock': 338065408, 'value': 7451, '#name': 'analog_in_state', '#sent_time': 6212.632160598, '#receive_time': 6212.634960234} mcu 'mcu': got {'oid': 21, 'next_clock': 339865408, 'value': 31562, '#name': 'analog_in_state', '#sent_time': 6212.632160598, '#receive_time': 6212.645075598} mcu 'mcu': got {'oid': 33, 'next_clock': 361465408, 'value': 31586, '#name': 'analog_in_state', '#sent_time': 6212.736003619, '#receive_time': 6212.765396328} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 mcu 'mcu': got {'oid': 1, 'clock': 324458207, 'query_ticks': 1316, 'next_sequence': 0, 'buffered': 0, 'fifo': 255, 'limit_count': 0, '#name': 'adxl345_status', '#sent_time': 6212.851179661, '#receive_time': 6212.85251315} Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Starting heater checks for extruder Stats 6214.4: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000008 mcu_task_stddev=0.000010 bytes_write=3033 bytes_read=6738 bytes_retransmit=9 bytes_invalid=0 send_seq=237 receive_seq=236 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180000457 Octopus: temp=0.0 raspberry_pi: temp=44.0 heater_bed: target=0 temp=0.0 pwm=0.000 sysload=0.41 cputime=136.662 memavail=490728 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 547844141888 webhooks: registering remote method 'reboot_machine' for connection id: 547844141888 webhooks: registering remote method 'pause_job_queue' for connection id: 547844141888 webhooks: registering remote method 'start_job_queue' for connection id: 547844141888 Stats 6215.4: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000008 mcu_task_stddev=0.000010 bytes_write=3039 bytes_read=6891 bytes_retransmit=9 bytes_invalid=0 send_seq=238 receive_seq=238 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002790 Octopus: temp=26.1 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=136.715 memavail=489176 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6216.4: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000008 mcu_task_stddev=0.000010 bytes_write=3045 bytes_read=7068 bytes_retransmit=9 bytes_invalid=0 send_seq=239 receive_seq=239 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001805 Octopus: temp=26.0 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=136.760 memavail=489648 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6217.4: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000008 mcu_task_stddev=0.000010 bytes_write=3051 bytes_read=7231 bytes_retransmit=9 bytes_invalid=0 send_seq=240 receive_seq=240 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001681 Octopus: temp=26.0 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=136.777 memavail=489588 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6218.4: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000008 mcu_task_stddev=0.000010 bytes_write=3057 bytes_read=7379 bytes_retransmit=9 bytes_invalid=0 send_seq=241 receive_seq=241 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001682 Octopus: temp=26.2 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=136.794 memavail=491040 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6219.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000004 bytes_write=3063 bytes_read=7570 bytes_retransmit=9 bytes_invalid=0 send_seq=242 receive_seq=242 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001629 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=136.811 memavail=490860 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6220.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000004 bytes_write=3069 bytes_read=7733 bytes_retransmit=9 bytes_invalid=0 send_seq=243 receive_seq=243 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001696 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=136.828 memavail=493924 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6221.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000004 bytes_write=3075 bytes_read=7881 bytes_retransmit=9 bytes_invalid=0 send_seq=244 receive_seq=244 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001941 Octopus: temp=25.9 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=136.858 memavail=494048 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6222.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000004 bytes_write=3081 bytes_read=8058 bytes_retransmit=9 bytes_invalid=0 send_seq=245 receive_seq=245 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002081 Octopus: temp=25.8 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=136.890 memavail=494048 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6397.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4149 bytes_read=36976 bytes_retransmit=9 bytes_invalid=0 send_seq=423 receive_seq=423 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002034 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=1.10 cputime=140.897 memavail=495008 print_time=234.661 buffer_time=0.415 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 547844141888: Disconnected Restarting printer Start printer at Fri Mar 17 15:07:03 2023 (1679065623.0 6399.1) ===== Config file ===== [board_pins octopus_11_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, z_endstop_pin=PG10, 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, z3_step_pin=PF9, z3_dir_pin=PF10, z3_enable_pin=PG2, z3_uart_pin=PF2, z3_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-11 [temperature_sensor Octopus] 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 = ~/printer_data/gcodes [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 = 22.2 pid_ki = 1.08 pid_kd = 114 [fan] pin = fan_part_cooling_pin shutdown_speed = 1.0 [heater_fan toolhead_cooling_fan] pin = fan_toolhead_cooling_pin fan_speed = 1 [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 [ratos_homing] axes = xyz z_hop = 15 z_hop_speed = 15 gcode = {% set x_homed = 'x' in printer.toolhead.homed_axes %} {% set y_homed = 'y' in printer.toolhead.homed_axes %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set z_probe = printer["gcode_macro RatOS"].z_probe|lower %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set z_hop = printer.configfile.config.ratos_homing.z_hop|float %} {% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %} {% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %} {% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %} {% set homing = printer["gcode_macro RatOS"].homing|lower %} {% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True M400 G90 {% if params.X is defined or params.Y is not defined and params.Z is not defined %} {% if homing_x == 'endstop' or homing == 'endstops' %} G28 X {% elif homing_x == 'sensorless' or homing == 'sensorless' %} HOME_X_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_x to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_x, homing)) } {% endif %} {% set x_homed = True %} G0 X{safe_home_x} F{speed} {% endif %} {% if params.Y is defined or params.X is not defined and params.Z is not defined %} {% if homing_y == 'endstop' or homing == 'endstops' %} G28 Y {% elif homing_y == 'sensorless' or homing == 'sensorless' %} HOME_Y_SENSORLESS {% else %} { action_emergency_stop("expected RatOS variable_homing_y to be 'sensorless' 'endstop' or variable_homing to be 'sensorless' or 'endstops' but found {} and {}".format(homing_y, homing)) } {% endif %} {% set y_homed = True %} G0 Y{safe_home_y} F{speed} {% endif %} {% if params.Z is defined or params.Y is not defined and params.X is not defined %} RESPOND MSG="Homing Z" {% if x_homed == False or y_homed == False %} M118 X and Y must be homed before homing Z { action_emergency_stop("X and Y must be homed before homing Z") } {% else %} {% if z_probe == "stowable" %} DEPLOY_PROBE G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} STOW_PROBE {% else %} G0 X{safe_home_x} Y{safe_home_y} F{speed} G28 Z G0 Z{z_hop} F{z_hop_speed} {% endif %} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error} [gcode_macro HOME_X_SENSORLESS] gcode = {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} {% set safe_home_x = printer["gcode_macro RatOS"].safe_home_x %} {% if safe_home_x is not defined or safe_home_x|lower == 'middle' %} {% set safe_home_x = printer.toolhead.axis_maximum.x / 2 %} {% endif %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current} G4 P300 G28 X SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [gcode_macro HOME_Y_SENSORLESS] gcode = {% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %} {% if safe_home_y is not defined or safe_home_y|lower == 'middle' %} {% set safe_home_y = printer.toolhead.axis_maximum.y / 2 %} {% endif %} {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} M204 S1000 SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current} G4 P300 G28 Y SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.configfile.config["tmc2209 stepper_x"].run_current} SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.configfile.config["tmc2209 stepper_y"].run_current} G4 P300 M204 S{printer.configfile.config.printer.max_accel} [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 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_force_absolute_position = False variable_preheat_extruder = False variable_preheat_extruder_temp = 150 variable_calibrate_bed_mesh = True variable_nozzle_priming = "primeblob" variable_nozzle_prime_start_x = "max" variable_nozzle_prime_start_y = "min" variable_nozzle_prime_direction = "auto" variable_filament_unload_length = 130 variable_filament_unload_speed = 5 variable_filament_load_length = 100 variable_filament_load_speed = 10 variable_start_print_park_in = "front" variable_start_print_park_z_height = 50 variable_start_print_heat_chamber_bed_temp = 115 variable_end_print_park_in = "front" variable_pause_print_park_in = "front" variable_macro_travel_speed = 300 variable_macro_z_speed = 15 variable_end_print_park_z_hop = 20 variable_homing = "endstops" variable_sensorless_x_current = 0.6 variable_sensorless_y_current = 0.9 variable_z_probe = "static" variable_safe_home_x = "middle" variable_safe_home_y = "middle" variable_stowable_probe_stop_on_error = False gcode = ECHO_RATOS_VARS variable_homing_x = "endstop" variable_homing_y = "endstop" [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 z_speed = printer["gcode_macro RatOS"].macro_z_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 - 20.0) %} {% set z_safe = 20.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} F{z_speed} _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 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M82 M117 Priming nozzle with prime line.. RESPOND MSG="Priming nozzle with prime line.." G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.3 F{z_speed} G92 E0 G1 Y{y_start + (70 * y_factor)} E16 F1200 G1 Y{y_start + (90 * y_factor)} 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 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} {% set x_start = 5 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} {% set x_start = printer.toolhead.axis_maximum.x - 5 %} {% else %} {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} {% set y_start = 5 %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} {% set y_start = printer.toolhead.axis_maximum.y - 5 %} {% set y_factor = -1 %} {% else %} {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} {% set y_factor = 1 %} {% else %} {% set y_factor = -1 %} {% endif %} {% endif %} {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} {% set y_factor = 1 %} {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} {% set y_factor = -1 %} {% endif %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} G90 M83 G0 Z{z} F{z_speed} G1 X{x_start} F{speed} G1 Y{y_start} F{speed} G1 Z0.5 F{z_speed} G1 F60 E20 M106 S102 G1 Z5 F100 E5 G1 F200 Y{y_start + (25 * y_factor)} E1 G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 M106 S0 G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 G1 F{speed} Y{y_start + (100 * y_factor)} 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 %} {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} M117 Unloading filament... G0 E10 F300 G0 E-5 F3600 G4 P3000 G0 E5 F3600 G0 E-15 F3600 G0 E-{unload_length} F{unload_speed} 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 %} {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} M117 Loading filament... G0 E{load_length} F{load_speed} G4 P1000 G0 E40 F100 M400 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 {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} G90 {% endif %} SAVE_GCODE_STATE NAME=start_print_state G21 G90 M82 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_BEGIN_BATCH {% endif %} MAYBE_HOME {% if params.CHAMBER_TEMP is defined %} _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} {% endif %} 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 {% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %} STOWABLE_PROBE_END_BATCH {% endif %} 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 = {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} BED_MESH_CLEAR {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} BED_MESH_CALIBRATE PROFILE={default_profile} BED_MESH_PROFILE LOAD={default_profile} {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} {% endif %} [gcode_macro _START_PRINT_PARK] gcode = {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} G0 Z{z} F{zSpeed} [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 _START_PRINT_HEAT_CHAMBER] description = Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. gcode = {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} G0 Z{z} F{zSpeed} M84 M117 Heating chamber... RESPOND MSG="Heating chamber..." M140 S{params.BED_TEMP} TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} MAYBE_HOME {% endif %} [gcode_macro END_PRINT] description = End print procedure, use this in your Slicer. gcode = SAVE_GCODE_STATE NAME=end_print_state _END_PRINT_BEFORE_HEATERS_OFF TURN_OFF_HEATERS _END_PRINT_AFTER_HEATERS_OFF _END_PRINT_PARK {% if printer["gcode_macro RatOS"].skew_profile is defined %} SET_SKEW CLEAR=1 {% endif %} M84 M107 M117 Done :) RESPOND MSG="Done :)" RESTORE_GCODE_STATE NAME=end_print_state [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 %} {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} {% if act_z < (max_z - z_hop) %} {% set z_safe = z_hop %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} G91 G1 E-2 F3600 G0 Z{z_safe} F3600 G1 E-2 F3600 G90 [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/printer_data/config/RatOS/scripts/generate-shaper-graph-x.sh timeout = 60. verbose = True [gcode_shell_command generate_shaper_graph_y] command = /home/pi/printer_data/config/RatOS/scripts/generate-shaper-graph-y.sh timeout = 60. verbose = True [gcode_shell_command generate_belt_tension_graph] command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh timeout = 90. verbose = True [gcode_shell_command compile_binaries] command = /home/pi/printer_data/config/RatOS/scripts/compile-binaries.sh timeout = 600. [gcode_shell_command change_hostname] command = /home/pi/printer_data/config/RatOS/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 RESPOND MSG="Belt tension graphs generated. You'll find them in the input_shaper folder in the machine tab!" [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 Z_TILT_ADJUST] rename_existing = Z_TILT_ADJUST_ORIG gcode = {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} DEPLOY_PROBE {% endif %} Z_TILT_ADJUST_ORIG {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} STOW_PROBE {% endif %} [stepper_x] step_pin = x_step_pin dir_pin = x_dir_pin enable_pin = !x_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 0 endstop_pin = ^x_endstop_pin [stepper_y] step_pin = y_step_pin dir_pin = y_dir_pin enable_pin = !y_enable_pin rotation_distance = 40 microsteps = 64 homing_speed = 50 homing_retract_dist = 5.0 position_max = 400 position_endstop = 400 endstop_pin = ^y_endstop_pin homing_positive_dir = true [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 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 microsteps = 64 [stepper_z2] step_pin = z2_step_pin dir_pin = !z2_dir_pin enable_pin = !z2_enable_pin rotation_distance = 4 microsteps = 64 [extruder] step_pin = e_step_pin dir_pin = !e_dir_pin enable_pin = !e_enable_pin microsteps = 64 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 max_extrude_only_distance = 200 nozzle_diameter = 0.4 heater_pin = e_heater_pin sensor_type = ATC Semitec 104GT-2 sensor_pin = e_sensor_pin min_extrude_temp = 170 min_temp = 0 max_temp = 285 pressure_advance = 0.03 control = pid pid_kp = 28.413 pid_ki = 1.334 pid_kd = 151.300 [tmc2209 stepper_x] stealthchop_threshold = 1 uart_pin = x_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_y] stealthchop_threshold = 1 uart_pin = y_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 extruder] uart_pin = e_uart_pin run_current = 0.707 stealthchop_threshold = 0 interpolate = False driver_tbl = 1 driver_toff = 3 driver_hend = 9 driver_hstrt = 7 [tmc2209 stepper_z] stealthchop_threshold = 1 uart_pin = z0_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z1] stealthchop_threshold = 1 uart_pin = z1_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [tmc2209 stepper_z2] stealthchop_threshold = 1 uart_pin = z2_uart_pin run_current = 1.1 driver_tbl = 1 driver_toff = 3 driver_hend = 0 driver_hstrt = 0 [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 = 20 retries = 10 retry_tolerance = 0.02 [bltouch] sensor_pin = ^bltouch_sensor_pin control_pin = bltouch_control_pin speed = 7 pin_move_time = 0.675 sample_retract_dist = 10 pin_up_reports_not_triggered = True pin_up_touch_mode_reports_triggered = True x_offset = -28 y_offset = -13 z_offset = 1.0 [firmware_retraction] retract_speed = 120 unretract_extra_length = 0 unretract_speed = 120 retract_length = 0.5 ======================= Extruder max_extrude_ratio=0.266081 mcu 'mcu': Starting serial connect webhooks client 547862320656: New connection webhooks client 547862320656: Client info {'program': 'Moonraker', 'version': 'v0.8.0-29-g80920dd'} Loaded MCU 'mcu' 117 commands (v0.11.0-140-gdd390913 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2) MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=-268.498024 slope=1294.861660 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) Starting heater checks for heater_bed bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (48.0, 33.0) | (20.0, 20.0) 1 | (105.5, 33.0) | (77.5, 20.0) 2 | (163.0, 33.0) | (135.0, 20.0) 3 | (220.5, 33.0) | (192.5, 20.0) 4 | (278.0, 33.0) | (250.0, 20.0) 5 | (335.5, 33.0) | (307.5, 20.0) 6 | (393.0, 33.0) | (365.0, 20.0) 7 | (393.0, 89.7) | (365.0, 76.7) 8 | (335.5, 89.7) | (307.5, 76.7) 9 | (278.0, 89.7) | (250.0, 76.7) 10 | (220.5, 89.7) | (192.5, 76.7) 11 | (163.0, 89.7) | (135.0, 76.7) 12 | (105.5, 89.7) | (77.5, 76.7) 13 | (48.0, 89.7) | (20.0, 76.7) 14 | (48.0, 146.3) | (20.0, 133.3) 15 | (105.5, 146.3) | (77.5, 133.3) 16 | (163.0, 146.3) | (135.0, 133.3) 17 | (220.5, 146.3) | (192.5, 133.3) 18 | (278.0, 146.3) | (250.0, 133.3) 19 | (335.5, 146.3) | (307.5, 133.3) 20 | (393.0, 146.3) | (365.0, 133.3) 21 | (393.0, 203.0) | (365.0, 190.0) 22 | (335.5, 203.0) | (307.5, 190.0) 23 | (278.0, 203.0) | (250.0, 190.0) 24 | (220.5, 203.0) | (192.5, 190.0) 25 | (163.0, 203.0) | (135.0, 190.0) 26 | (105.5, 203.0) | (77.5, 190.0) 27 | (48.0, 203.0) | (20.0, 190.0) 28 | (48.0, 259.6) | (20.0, 246.6) 29 | (105.5, 259.6) | (77.5, 246.6) 30 | (163.0, 259.6) | (135.0, 246.6) 31 | (220.5, 259.6) | (192.5, 246.6) 32 | (278.0, 259.6) | (250.0, 246.6) 33 | (335.5, 259.6) | (307.5, 246.6) 34 | (393.0, 259.6) | (365.0, 246.6) 35 | (393.0, 316.3) | (365.0, 303.3) 36 | (335.5, 316.3) | (307.5, 303.3) 37 | (278.0, 316.3) | (250.0, 303.3) 38 | (220.5, 316.3) | (192.5, 303.3) 39 | (163.0, 316.3) | (135.0, 303.3) 40 | (105.5, 316.3) | (77.5, 303.3) 41 | (48.0, 316.3) | (20.0, 303.3) 42 | (48.0, 373.0) | (20.0, 360.0) 43 | (105.5, 373.0) | (77.5, 360.0) 44 | (163.0, 373.0) | (135.0, 360.0) 45 | (220.5, 373.0) | (192.5, 360.0) 46 | (278.0, 373.0) | (250.0, 360.0) 47 | (335.5, 373.0) | (307.5, 360.0) 48 | (393.0, 373.0) | (365.0, 360.0) Starting heater checks for extruder Stats 6402.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3310 bytes_read=6745 bytes_retransmit=9 bytes_invalid=0 send_seq=274 receive_seq=274 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180000254 Octopus: temp=0.0 raspberry_pi: temp=44.0 heater_bed: target=0 temp=0.0 pwm=0.000 sysload=1.09 cputime=142.417 memavail=487236 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 547862320656 webhooks: registering remote method 'reboot_machine' for connection id: 547862320656 webhooks: registering remote method 'pause_job_queue' for connection id: 547862320656 webhooks: registering remote method 'start_job_queue' for connection id: 547862320656 Stats 6403.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3316 bytes_read=6893 bytes_retransmit=9 bytes_invalid=0 send_seq=275 receive_seq=275 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001994 Octopus: temp=26.0 raspberry_pi: temp=44.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=1.09 cputime=142.461 memavail=486916 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6404.5: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3322 bytes_read=7085 bytes_retransmit=9 bytes_invalid=0 send_seq=276 receive_seq=276 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001855 Octopus: temp=26.0 raspberry_pi: temp=44.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=1.09 cputime=142.499 memavail=488956 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6405.5: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3328 bytes_read=7248 bytes_retransmit=9 bytes_invalid=0 send_seq=277 receive_seq=277 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001795 Octopus: temp=26.0 raspberry_pi: temp=44.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=1.00 cputime=142.520 memavail=487964 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6406.5: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3334 bytes_read=7396 bytes_retransmit=9 bytes_invalid=0 send_seq=278 receive_seq=278 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001746 Octopus: temp=25.9 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=1.00 cputime=142.541 memavail=489504 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6407.5: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3340 bytes_read=7573 bytes_retransmit=9 bytes_invalid=0 send_seq=279 receive_seq=279 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001709 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=1.00 cputime=142.558 memavail=489252 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6408.5: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3346 bytes_read=7736 bytes_retransmit=9 bytes_invalid=0 send_seq=280 receive_seq=280 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001694 Octopus: temp=26.1 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=1.00 cputime=142.575 memavail=492468 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6409.5: gcodein=0 mcu: mcu_awake=0.007 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3352 bytes_read=7884 bytes_retransmit=9 bytes_invalid=0 send_seq=281 receive_seq=281 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001685 Octopus: temp=26.1 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=1.00 cputime=142.591 memavail=492560 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6410.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3358 bytes_read=8075 bytes_retransmit=9 bytes_invalid=0 send_seq=282 receive_seq=282 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001738 Octopus: temp=26.0 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.92 cputime=142.608 memavail=492560 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6411.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3364 bytes_read=8238 bytes_retransmit=9 bytes_invalid=0 send_seq=283 receive_seq=283 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180001935 Octopus: temp=26.0 raspberry_pi: temp=44.0 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.92 cputime=142.635 memavail=492560 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6412.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3370 bytes_read=8386 bytes_retransmit=9 bytes_invalid=0 send_seq=284 receive_seq=284 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002085 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.92 cputime=142.664 memavail=492560 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6413.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3392 bytes_read=8568 bytes_retransmit=9 bytes_invalid=0 send_seq=286 receive_seq=286 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=10 freq=180002147 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.92 cputime=142.694 memavail=494708 print_time=14.333 buffer_time=0.245 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6414.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3413 bytes_read=8736 bytes_retransmit=9 bytes_invalid=0 send_seq=288 receive_seq=288 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002113 Octopus: temp=26.1 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.92 cputime=142.711 memavail=494700 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6415.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3419 bytes_read=8898 bytes_retransmit=9 bytes_invalid=0 send_seq=289 receive_seq=289 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002077 Octopus: temp=26.2 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.85 cputime=142.727 memavail=494700 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6416.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3425 bytes_read=9075 bytes_retransmit=9 bytes_invalid=0 send_seq=290 receive_seq=290 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002067 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.85 cputime=142.744 memavail=491708 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6417.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3431 bytes_read=9238 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002056 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.85 cputime=142.761 memavail=491708 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6418.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3437 bytes_read=9386 bytes_retransmit=9 bytes_invalid=0 send_seq=292 receive_seq=292 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002041 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.85 cputime=142.782 memavail=494588 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6419.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3443 bytes_read=9563 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002157 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.85 cputime=142.813 memavail=494436 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6420.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3449 bytes_read=9740 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002196 Octopus: temp=26.2 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.86 cputime=142.845 memavail=494436 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6421.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3455 bytes_read=9888 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002229 Octopus: temp=26.2 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.86 cputime=142.876 memavail=494436 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6422.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3461 bytes_read=10065 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002231 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.86 cputime=142.909 memavail=494436 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6423.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3467 bytes_read=10219 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002239 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.86 cputime=142.935 memavail=494612 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6424.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3473 bytes_read=10360 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002207 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.86 cputime=142.951 memavail=494684 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6425.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3479 bytes_read=10551 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002163 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.79 cputime=142.969 memavail=494432 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6426.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3485 bytes_read=10714 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002159 Octopus: temp=26.2 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.79 cputime=142.986 memavail=492456 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6427.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3497 bytes_read=10878 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002110 Octopus: temp=26.1 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.79 cputime=143.002 memavail=492456 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6428.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3503 bytes_read=11055 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002132 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.79 cputime=143.027 memavail=494584 print_time=14.333 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6429.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3522 bytes_read=11223 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002138 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.79 cputime=143.060 memavail=494704 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6430.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3528 bytes_read=11385 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002153 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.73 cputime=143.092 memavail=494452 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6431.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3534 bytes_read=11562 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002182 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.73 cputime=143.126 memavail=494452 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6432.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3540 bytes_read=11725 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002187 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.73 cputime=143.157 memavail=494484 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6433.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3546 bytes_read=11873 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002158 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.73 cputime=143.181 memavail=494692 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6434.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3552 bytes_read=12050 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002146 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.73 cputime=143.199 memavail=494700 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6435.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3558 bytes_read=12227 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002117 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.67 cputime=143.215 memavail=494700 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6436.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3564 bytes_read=12375 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002093 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.67 cputime=143.232 memavail=491712 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6437.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3570 bytes_read=12552 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002077 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.67 cputime=143.249 memavail=491712 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6438.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3576 bytes_read=12715 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002082 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.67 cputime=143.273 memavail=494560 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6439.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3582 bytes_read=12863 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002088 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.67 cputime=143.304 memavail=494660 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6440.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3588 bytes_read=13054 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002097 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.62 cputime=143.336 memavail=494660 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6441.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3594 bytes_read=13217 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002108 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.62 cputime=143.368 memavail=494156 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6442.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3600 bytes_read=13365 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002117 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.62 cputime=143.400 memavail=493904 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6443.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3606 bytes_read=13542 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002099 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.62 cputime=143.425 memavail=494592 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6444.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3612 bytes_read=13705 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002088 Octopus: temp=25.8 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.62 cputime=143.442 memavail=494648 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6445.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3618 bytes_read=13867 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002100 Octopus: temp=25.8 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.57 cputime=143.460 memavail=494648 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6446.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3624 bytes_read=14044 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002083 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.57 cputime=143.476 memavail=491656 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6447.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3630 bytes_read=14195 bytes_retransmit=9 bytes_invalid=0 send_seq=323 receive_seq=323 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002067 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.57 cputime=143.493 memavail=491656 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6448.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3636 bytes_read=14351 bytes_retransmit=9 bytes_invalid=0 send_seq=324 receive_seq=324 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002097 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.57 cputime=143.517 memavail=494532 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6449.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3642 bytes_read=14514 bytes_retransmit=9 bytes_invalid=0 send_seq=325 receive_seq=325 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002092 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.57 cputime=143.548 memavail=494372 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6450.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3648 bytes_read=14691 bytes_retransmit=9 bytes_invalid=0 send_seq=326 receive_seq=326 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002088 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.52 cputime=143.579 memavail=494372 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6451.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3654 bytes_read=14853 bytes_retransmit=9 bytes_invalid=0 send_seq=327 receive_seq=327 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002086 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.52 cputime=143.609 memavail=494372 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6452.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3660 bytes_read=15016 bytes_retransmit=9 bytes_invalid=0 send_seq=328 receive_seq=328 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002089 Octopus: temp=26.0 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.52 cputime=143.639 memavail=494376 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6453.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3666 bytes_read=15179 bytes_retransmit=9 bytes_invalid=0 send_seq=329 receive_seq=329 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002086 Octopus: temp=25.9 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.1 pwm=0.000 sysload=0.52 cputime=143.664 memavail=494528 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6454.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3672 bytes_read=15341 bytes_retransmit=9 bytes_invalid=0 send_seq=330 receive_seq=330 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002081 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.52 cputime=143.680 memavail=494368 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6455.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3678 bytes_read=15518 bytes_retransmit=9 bytes_invalid=0 send_seq=331 receive_seq=331 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002071 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.48 cputime=143.697 memavail=494368 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6456.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3684 bytes_read=15681 bytes_retransmit=9 bytes_invalid=0 send_seq=332 receive_seq=332 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002058 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.48 cputime=143.713 memavail=491632 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=19.9 pwm=0.000 Stats 6457.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3690 bytes_read=15843 bytes_retransmit=9 bytes_invalid=0 send_seq=333 receive_seq=333 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002050 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.48 cputime=143.730 memavail=494360 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6458.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3696 bytes_read=16006 bytes_retransmit=9 bytes_invalid=0 send_seq=334 receive_seq=334 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002061 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.48 cputime=143.748 memavail=494564 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6459.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3702 bytes_read=16169 bytes_retransmit=9 bytes_invalid=0 send_seq=335 receive_seq=335 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002069 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.48 cputime=143.765 memavail=494564 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6460.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3708 bytes_read=16345 bytes_retransmit=9 bytes_invalid=0 send_seq=336 receive_seq=336 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002057 Octopus: temp=25.8 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.44 cputime=143.782 memavail=494060 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6461.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3714 bytes_read=16508 bytes_retransmit=9 bytes_invalid=0 send_seq=337 receive_seq=337 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002047 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.44 cputime=143.799 memavail=494060 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6462.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3720 bytes_read=16671 bytes_retransmit=9 bytes_invalid=0 send_seq=338 receive_seq=338 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002038 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.44 cputime=143.816 memavail=494068 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6463.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3726 bytes_read=16848 bytes_retransmit=9 bytes_invalid=0 send_seq=339 receive_seq=339 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002028 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.44 cputime=143.840 memavail=494540 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6464.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3732 bytes_read=16996 bytes_retransmit=9 bytes_invalid=0 send_seq=340 receive_seq=340 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002035 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.44 cputime=143.871 memavail=494600 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6465.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3738 bytes_read=17173 bytes_retransmit=9 bytes_invalid=0 send_seq=341 receive_seq=341 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002043 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=143.904 memavail=494348 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6466.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3744 bytes_read=17350 bytes_retransmit=9 bytes_invalid=0 send_seq=342 receive_seq=342 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002044 Octopus: temp=25.8 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=143.936 memavail=491616 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6467.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3750 bytes_read=17498 bytes_retransmit=9 bytes_invalid=0 send_seq=343 receive_seq=343 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002048 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=143.966 memavail=491616 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6468.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3756 bytes_read=17661 bytes_retransmit=9 bytes_invalid=0 send_seq=344 receive_seq=344 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002047 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.40 cputime=143.993 memavail=494476 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6469.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3762 bytes_read=17838 bytes_retransmit=9 bytes_invalid=0 send_seq=345 receive_seq=345 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002041 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.40 cputime=144.011 memavail=494580 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6470.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3768 bytes_read=17998 bytes_retransmit=9 bytes_invalid=0 send_seq=346 receive_seq=346 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002032 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=144.025 memavail=494580 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6471.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3774 bytes_read=18150 bytes_retransmit=9 bytes_invalid=0 send_seq=347 receive_seq=347 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002027 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=144.041 memavail=494580 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6472.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3780 bytes_read=18323 bytes_retransmit=9 bytes_invalid=0 send_seq=348 receive_seq=348 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002022 Octopus: temp=25.8 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=144.058 memavail=494328 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6473.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3786 bytes_read=18471 bytes_retransmit=9 bytes_invalid=0 send_seq=349 receive_seq=349 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002018 Octopus: temp=25.9 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=144.079 memavail=494404 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6474.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3792 bytes_read=18634 bytes_retransmit=9 bytes_invalid=0 send_seq=350 receive_seq=350 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002022 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.37 cputime=144.109 memavail=494564 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6475.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3798 bytes_read=18825 bytes_retransmit=9 bytes_invalid=0 send_seq=351 receive_seq=351 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002030 Octopus: temp=26.1 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=144.141 memavail=494564 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6476.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3804 bytes_read=18988 bytes_retransmit=9 bytes_invalid=0 send_seq=352 receive_seq=352 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002033 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=144.172 memavail=492072 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6477.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3810 bytes_read=19136 bytes_retransmit=9 bytes_invalid=0 send_seq=353 receive_seq=353 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002048 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=144.203 memavail=492072 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6478.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3816 bytes_read=19313 bytes_retransmit=9 bytes_invalid=0 send_seq=354 receive_seq=354 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002060 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=144.229 memavail=494488 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6479.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3822 bytes_read=19476 bytes_retransmit=9 bytes_invalid=0 send_seq=355 receive_seq=355 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002052 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.34 cputime=144.246 memavail=494524 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6480.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3828 bytes_read=19638 bytes_retransmit=9 bytes_invalid=0 send_seq=356 receive_seq=356 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002046 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=144.263 memavail=494524 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6481.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3834 bytes_read=19815 bytes_retransmit=9 bytes_invalid=0 send_seq=357 receive_seq=357 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002040 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=144.280 memavail=494276 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6482.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3840 bytes_read=19978 bytes_retransmit=9 bytes_invalid=0 send_seq=358 receive_seq=358 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002032 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=144.296 memavail=494276 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6483.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3846 bytes_read=20126 bytes_retransmit=9 bytes_invalid=0 send_seq=359 receive_seq=359 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002031 Octopus: temp=26.0 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=144.318 memavail=494380 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6484.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3852 bytes_read=20303 bytes_retransmit=9 bytes_invalid=0 send_seq=360 receive_seq=360 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002035 Octopus: temp=26.0 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.31 cputime=144.349 memavail=494272 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6485.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3858 bytes_read=20480 bytes_retransmit=9 bytes_invalid=0 send_seq=361 receive_seq=361 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002042 Octopus: temp=26.2 raspberry_pi: temp=42.9 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.29 cputime=144.381 memavail=494272 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6486.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3864 bytes_read=20628 bytes_retransmit=9 bytes_invalid=0 send_seq=362 receive_seq=362 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002049 Octopus: temp=26.1 raspberry_pi: temp=42.9 heater_bed: target=0 temp=19.9 pwm=0.000 sysload=0.29 cputime=144.403 memavail=492040 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.0 pwm=0.000 Stats 6487.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3870 bytes_read=20805 bytes_retransmit=9 bytes_invalid=0 send_seq=363 receive_seq=363 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002043 Octopus: temp=26.1 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.29 cputime=144.420 memavail=492040 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000 Stats 6488.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3882 bytes_read=20984 bytes_retransmit=9 bytes_invalid=0 send_seq=365 receive_seq=365 retransmit_seq=2 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 stalled_bytes=0 freq=180002034 Octopus: temp=25.9 raspberry_pi: temp=43.5 heater_bed: target=0 temp=20.0 pwm=0.000 sysload=0.29 cputime=144.438 memavail=494440 print_time=29.603 buffer_time=0.000 print_stall=0 extruder: target=0 temp=20.1 pwm=0.000