Loaded MCU 'beacon' 45 commands (Beacon 2.1.0 / )
MCU 'beacon' config: ADC_MAX=4095 BEACON_ACCEL_BITS=12 BEACON_ACCEL_SCALE_16G=7.81 BEACON_ACCEL_SCALE_2G=0.98 BEACON_ACCEL_SCALE_4G=1.95 BEACON_ACCEL_SCALE_8G=3.91 BEACON_ADC_SMOOTH_COUNT=16 BEACON_HAS_ACCEL=1 BEACON_REV=H CLOCK_FREQ=32000000 MCU=beacon STATS_SUMSQ_BASE=256
Configured MCU 'beacon' (0 moves)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-pro-h723-11]
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=PG13,
z1_step_pin=PE2,
z1_dir_pin=PE3,
z1_enable_pin=PD4,
z1_uart_pin=PE1,
z1_diag_pin=PG14,
z2_step_pin=PE6,
z2_dir_pin=PA14,
z2_enable_pin=PE0,
z2_uart_pin=PD3,
z2_diag_pin=PG15,
z3_step_pin=PF9,
z3_dir_pin=PF10,
z3_enable_pin=PG2,
z3_uart_pin=PF2,
z3_diag_pin=PG12,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
e_power_draw_pin=null,
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,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PG15,
filament_sensor_motion_pin=PG14,
ratrig_vaoc_probe_pin=PG10,
ratrig_vaoc_led_pin=PB0,
ratrig_vaoc_fan_pin=PD13,
chamber_lighting_pin=PB11,
chamber_filter_4p_fan_pin=PD14,
chamber_filter_4p_fan_enable_pin=PD15
[mcu]
serial = /dev/RatOS/btt-octopus-pro-h723-11
[temperature_sensor Octopus_Pro_H723_V1.1]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_software_mosi_pin = PB5
spi_software_miso_pin = PB4
spi_software_sclk_pin = PB3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD3,
e_dir_pin=PD2,
e_enable_pin=PB6,
e_uart_pin=PB3,
e_heater_pin=PB0,
e_sensor_pin=PA1,
e_power_draw_pin=null,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB1,
bltouch_sensor_pin=PA5,
bltouch_control_pin=PA4,
probe_pin=PA5,
fan_part_cooling_pin=PB8,
fan_toolhead_cooling_pin=PB4,
fan_controller_board_pin=null,
heater_bed_heating_pin=null,
heater_bed_sensor_pin=null,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PA3,
filament_sensor_motion_pin=PA9,
ratrig_vaoc_probe_pin=null,
ratrig_vaoc_led_pin=null,
ratrig_vaoc_fan_pin=null,
chamber_lighting_pin=null,
chamber_filter_4p_fan_pin=null,
chamber_filter_4p_fan_enable_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-gen2-10-t0
[temperature_sensor EBB42_Gen2_v1.0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[lis2dw toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB1
spi_software_mosi_pin = toolboard_t0:PB11
spi_software_miso_pin = toolboard_t0:PB2
spi_software_sclk_pin = toolboard_t0:PB10
[gcode_macro RatOS]
variable_homing = "endstops"
variable_z_probe = "static"
variable_sensorless_x_current = 0.6
variable_sensorless_y_current = 0.9
variable_safe_home_x = "middle"
variable_safe_home_y = "middle"
variable_driver_type_x = "tmc2209"
variable_driver_type_y = "tmc2209"
variable_stowable_probe_stop_on_error = False
variable_chamber_filter_enable = True
variable_chamber_filter_speed = 0.5
variable_chamber_filter_disable_speed = 1.0
variable_chamber_filter_enable_at = "after_print_start"
variable_chamber_filter_disable_period = 300
variable_chamber_filter_disable_bed_temp = 0
variable_chamber_heater_enable = True
variable_chamber_heater_bed_temp = 115
variable_chamber_heater_preheating_temp = 150
variable_chamber_heater_heating_temp_offset = 25
variable_chamber_heater_control_external_heater = False
variable_chamber_heater_air_circulation_enable = True
variable_chamber_heater_air_circulation_fan_speed = 0.35
variable_chamber_heater_air_circulation_y_pos = 0
variable_chamber_heater_air_circulation_z_pos = 100
variable_chamber_heater_extra_fan_speed = 1.0
variable_chamber_heater_filter_fan_speed = 1.0
variable_led_status_action = 0.0,1.0,1.0
variable_led_status_success = 0.0,1.0,0.0
variable_led_status_error = 1.0,0.0,1.0
variable_led_status_on = 1.0,1.0,1.0
variable_led_status_off = 0.0,0.0,1.0
variable_led_status_standby = 0.1,0.1,0.1
variable_led_status_heating = 1.0,0.0,0.0
variable_led_status_cooling = 0.0,0.0,1.0
variable_calibrate_bed_mesh = True
variable_adaptive_mesh = True
variable_start_print_park_in = "front"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "front"
variable_end_print_park_z_hop = 20
variable_nozzle_priming = "primeblob"
variable_nozzle_prime_start_x = "max"
variable_nozzle_prime_start_y = "min"
variable_nozzle_prime_direction = "auto"
variable_nozzle_prime_bridge_fan = 102
variable_probe_for_priming_result = None
variable_probe_for_priming_end_result = None
variable_probe_for_priming_result_t1 = None
variable_probe_for_priming_end_result_t1 = None
variable_probe_for_priming_disable_mesh_constraints = False
variable_adaptive_prime_offset_threshold = -1.0
variable_last_z_offset = None
variable_runout_park_in = "front"
variable_enable_unload_tip_forming = False
variable_filament_unload_length = 150
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 = True
variable_preheat_extruder_temp = 150
variable_macro_travel_speed = 300
variable_macro_travel_accel = 3000
variable_macro_z_speed = 15
variable_bed_margin_x = [0, 0]
variable_bed_margin_y = [0, 0]
variable_printable_x_min = 0
variable_printable_x_max = 0
variable_printable_y_min = 0
variable_printable_y_max = 0
variable_end_print_motors_off = True
variable_status_color_ok = "00FF00"
variable_status_color_error = "FF0000"
variable_status_color_unknown = "FFFF00"
variable_end_print_retract_filament = 10
gcode =
ECHO_RATOS_VARS
variable_beacon_bed_mesh_scv = 25
variable_beacon_contact_z_homing = False
variable_beacon_contact_start_print_true_zero = True
variable_beacon_contact_start_print_true_zero_fuzzy_position = True
variable_beacon_contact_calibrate_model_on_true_zero = True
variable_beacon_contact_wipe_before_true_zero = True
variable_beacon_contact_wipe_before_true_zero_method = "probe_clean"
variable_beacon_contact_true_zero_temp = 170
variable_beacon_contact_prime_probing = True
variable_beacon_contact_expansion_compensation = True
variable_beacon_contact_bed_mesh = False
variable_beacon_contact_bed_mesh_samples = 2
variable_beacon_contact_z_tilt_adjust = False
variable_beacon_contact_z_tilt_adjust_samples = 2
variable_beacon_scan_compensation_enable = True
variable_beacon_scan_compensation_profile = "auto"
variable_beacon_scan_compensation_desired_spacing = 10
variable_beacon_scan_compensation_bed_temp_mismatch_is_error = False
variable_beacon_contact_poke_bottom_limit = -1
variable_beacon_scan_method_automatic = False
variable_beacon_adaptive_heat_soak_max_wait = 5400
variable_beacon_adaptive_heat_soak_extra_wait_after_completion = 0
variable_beacon_adaptive_heat_soak_layer_quality = 3
variable_beacon_adaptive_heat_soak_maximum_first_layer_duration = 1800
variable_beacon_contact_start_print_true_zero_fuzzy_radius = 20
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209"]
variable_y_axes = ["y"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2", "z3"]
[ratos_homing]
axes = xyz
z_hop = 15
z_hop_speed = 15
gcode =
_LED_ON
{% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set target_idex_mode = printer["dual_carriage"].carriage_1|lower %}
_IDEX_SINGLE
_SELECT_TOOL T={default_toolhead} TOOLSHIFT=false
{% endif %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True
M400
G90
{% set X = true if params.X is defined else false %}
{% set Y = true if params.Y is defined else false %}
{% set Z = true if params.Z is defined else false %}
{% if printer["gcode_macro RatOS"].home_y_first|default(false)|lower == 'true' %}
HOME_Y X={X} Y={Y} Z={Z}
HOME_X X={X} Y={Y} Z={Z}
{% else %}
HOME_X X={X} Y={Y} Z={Z}
HOME_Y X={X} Y={Y} Z={Z}
{% endif %}
HOME_Z X={X} Y={Y} Z={Z}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR
{% endif %}
{% endif %}
[gcode_macro HOME_X]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %}
{% set homing_x = homing_x if homing_x else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_X" MSG="printable_x_max: {printable_x_max}, safe_home_x: {safe_home_x}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}"
{% if X or not Y and not Z %}
{% if homing_x == 'endstop' %}
G28 X
{% elif homing_x == 'sensorless' %}
{% if printer["dual_carriage"] is defined %}
{ action_emergency_stop("sensorless homing not supported on IDEX!") }
{% endif %}
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 %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % (0 if default_toolhead==1 else 1)].parking_position|float %}
SET_DUAL_CARRIAGE CARRIAGE={0 if default_toolhead==1 else 1} MODE=PRIMARY
G1 X{parking_position} F{speed}
SET_DUAL_CARRIAGE CARRIAGE={default_toolhead} MODE=PRIMARY
{% endif %}
{% set x_homed = True %}
G0 X{safe_home_x} F{speed}
M400
{% endif %}
[gcode_macro HOME_Y]
gcode =
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %}
{% set homing_y = homing_y if homing_y else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Y" MSG="printable_y_max: {printable_y_max}, safe_home_y: {safe_home_y}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}"
{% if Y or not X and not Z %}
{% if homing_y == 'endstop' %}
G28 Y
{% elif homing_y == '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 %}
[gcode_macro HOME_Z]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% set beacon_contact_z_homing = true if printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_z_home_position_fuzzing_radius = printer["gcode_macro RatOS"].beacon_z_home_position_fuzzing_radius|default(0)|float %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Z" MSG="x_homed: {x_homed}, y_homed: {y_homed}, z_probe: {z_probe}, beacon_contact_z_homing: {beacon_contact_z_homing}"
{% if Z or not Y and not X %}
RATOS_ECHO MSG="Homing Z"
{% if x_homed == False or y_homed == False %}
{ action_emergency_stop("X and Y must be homed before homing Z") }
{% else %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_z_homing %}
{% if beacon_contact_start_print_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro HOME_X_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
G4 P300
G28 X
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
[gcode_macro HOME_Y_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
G4 P300
G28 Y
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
[gcode_macro _Z_HOP]
description = Move Z axis up by Z_HOP distance at Z_HOP_SPEED. In relative mode it will move Z axis up by Z_HOP distance. In absolute mode it will move Z axis to Z_HOP distance.
gcode =
{% set z_hop = printer.fastconfig.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro __MOVE_TO_SAFE_Z_HOME_ECHO_DEBUG]
gcode =
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="x: {params.X}, y: {params.Y}, z_hop: {params.Z_HOP}, fuzzy_radius: {params.FUZZY_RADIUS}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}, printable_x_max: {printer['gcode_macro RatOS'].printable_x_max}, printable_y_max: {printer['gcode_macro RatOS'].printable_y_max}"
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis. Specify ABL=1 to also ensure that automatic bed levelling is applied (if configured).
variable_is_kinematic_position_overriden = False
gcode =
{% set abl = params.ABL|default('')|lower in ('true', 'yes', '1') %}
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
RATOS_ECHO 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 %}
RATOS_ECHO MSG="Homing {axesToHome}"
G28 {axesToHome}
{% else %}
RATOS_ECHO MSG="All requested axes already homed. Skipping homing."
{% endif %}
{% endif %}
{% if abl %}
{% if printer.z_tilt is defined %}
{% if not printer.z_tilt.applied %}
RATOS_ECHO MSG="Performing Z tilt adjustment..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% else %}
RATOS_ECHO MSG="Z tilt already applied. Skipping Z tilt adjustment."
{% endif %}
{% elif printer.quad_gantry_level is defined %}
{% if not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Performing quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% else %}
RATOS_ECHO MSG="Quad gantry leveling already applied. Skipping quad gantry leveling."
{% endif %}
{% else %}
RATOS_ECHO MSG="No automatic bed leveling method configured. Skipping bed leveling."
{% endif %}
{% endif %}
[gcode_macro PID_CALIBRATE_HOTEND]
description = Perform a PID calibration test for a given extruder heater.
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set temp = params.TEMP|default(220)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_HOTEND" MSG="TEMP={temp}"
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO MSG="PID calibration hotend heater T0 at {temp}°C..."
PID_CALIBRATE HEATER=extruder TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
{% if toolhead==0 or toolhead==1 %}
RATOS_ECHO MSG="PID calibration hotend heater T{toolhead} at {temp}°C..."
PID_CALIBRATE HEATER=extruder{'' if toolhead==0 else toolhead} TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_BED]
description = Perform a PID calibration test for the bed heater.
gcode =
{% set temp = params.TEMP|default(80)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_BED" MSG="TEMP={temp}"
RATOS_ECHO MSG="PID calibration bed heater at {temp}°C..."
PID_CALIBRATE HEATER=heater_bed TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_CHAMBER_HEATER]
description = Perform a PID calibration test for the chamber heater.
gcode =
{% set temp = params.TEMP|default(150)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_CHAMBER_HEATER" MSG="TEMP={temp}"
{% if printer["heater_generic chamber_heater"] is defined %}
RATOS_ECHO MSG="PID calibration chamber heater at {temp}°C..."
PID_CALIBRATE HEATER=chamber_heater TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_heater" %}
{% set link_text = "RatOS Chamber Heater" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber heater found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro INITIALIZE_PA_TUNING]
description = Start a pressure advance tuning tower.
gcode =
{% set start = params.START|default(0.0)|float %}
{% set factor = params.FACTOR|default(0.001)|float %}
{% set layer_number = printer["gcode_macro _ON_LAYER_CHANGE"].layer_number|default(0)|int %}
{% set is_printing_gcode = true if printer["gcode_macro START_PRINT"].is_printing_gcode|default(true)|lower == 'true' else false %}
{% if is_printing_gcode and layer_number < 2 %}
DEBUG_ECHO PREFIX="START_PA_TOWER" MSG="START: {start}, FACTOR: {factor}"
RATOS_ECHO MSG="Starting pressure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% else %}
RATOS_ECHO MSG="Pressure advance tuning tower requires you to be printing gcode and on layer 1 to start."
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro CHAMBER_FILTER_ON]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro CHAMBER_FILTER_OFF]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Deactivating chamber filter..."
_CHAMBER_FILTER_TURN_OFF
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro _CHAMBER_FILTER_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set chamber_filter_enable_at = printer["gcode_macro RatOS"].chamber_filter_enable_at|default('after_print_start')|lower %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_ON" MSG="at: {at}, chamber_filter_enable: {chamber_filter_enable}, chamber_filter_enable_at: {chamber_filter_enable_at}, chamber_filter_speed: {chamber_filter_speed}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if chamber_filter_enable_at == at %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON AT={at}
{% if chamber_filter_enable_at == "print_end" %}
_LED_CHAMBER_FILTER_ON
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_FILTER_OFF]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF" MSG="chamber_filter_enable: {chamber_filter_enable}, filter_disable_period: {filter_disable_period}, filter_disable_bed_temp: {filter_disable_bed_temp}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_period > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting {filter_disable_period} seconds before turning chamber filter off..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION={filter_disable_period}
{% endif %}
{% if filter_disable_bed_temp > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting for bed temp to cool down to {filter_disable_bed_temp}°C to turn filter off..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=0 MAXIMUM={filter_disable_bed_temp}
_CHAMBER_FILTER_TURN_OFF
_LED_CHAMBER_FILTER_OFF
{% endif %}
{% endif %}
[delayed_gcode _CHAMBER_FILTER_OFF_TIMER]
gcode =
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF_TIMER" MSG="executed"
_CHAMBER_FILTER_TURN_OFF
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Chamber filter turned off!"
_LED_CHAMBER_FILTER_OFF
[gcode_macro _CHAMBER_FILTER_TURN_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_speed|default(0)|float %}
{% if at == "print_end" %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_disable_speed|default(0)|float %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION=0
SET_FAN_SPEED FAN=filter SPEED={chamber_filter_speed}
[gcode_macro _CHAMBER_FILTER_TURN_OFF]
gcode =
SET_FAN_SPEED FAN=filter SPEED=0
[gcode_macro _CHAMBER_FILTER_SANITY_CHECK]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_bed_temp > 0 and filter_disable_period > 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable, not both.")}
{% endif %}
{% if filter_disable_bed_temp == 0 and filter_disable_period == 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable.")}
{% endif %}
{% endif %}
[gcode_macro CHAMBER_HEATER_ON]
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(45)|int %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp} IS_FROM_START_PRINT=False
[gcode_macro CHAMBER_HEATER_OFF]
gcode =
_CHAMBER_HEATER_OFF
[gcode_macro _CHAMBER_HEATER_ON]
variable_chamber_temp = 0
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set is_from_start_print = true if params.IS_FROM_START_PRINT|default(True)|lower == 'true' else false %}
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set chamber_heater_enable = true if printer["gcode_macro RatOS"].chamber_heater_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
{% set chamber_heater_preheating_temp = printer["gcode_macro RatOS"].chamber_heater_preheating_temp|default(150)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set chamber_heater_control_external_heater = true if printer["gcode_macro RatOS"].chamber_heater_control_external_heater|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_enable = true if printer["gcode_macro RatOS"].chamber_heater_air_circulation_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_fan_speed = printer["gcode_macro RatOS"].chamber_heater_air_circulation_fan_speed|default(0.35)|float %}
{% set chamber_heater_air_circulation_y_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_y_pos|default(0)|float %}
{% set chamber_heater_air_circulation_z_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_z_pos|default(100)|float %}
DEBUG_ECHO PREFIX="_CHAMBER_HEATER_ON" MSG="chamber_heater_enable: {chamber_heater_enable}, chamber_heater_preheating_temp: {chamber_heater_preheating_temp}, chamber_heater_heating_temp_offset: {chamber_heater_heating_temp_offset}, bed_temp: {bed_temp}, chamber_temp: {chamber_temp}, start_chamber_temp: {start_chamber_temp}"
{% if chamber_heater_enable and chamber_temp > 0 and chamber_heater_bed_temp > 0 %}
_LED_HEATING
RATOS_ECHO MSG="Preheating chamber to {(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}°C..."
{% set chamber_temp_sensor = "extruder" %}
{% if printer["dual_carriage"] is defined and default_toolhead == 1 %}
{% set chamber_temp_sensor = "extruder1" %}
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% set chamber_temp_sensor = "temperature_sensor chamber" %}
{% endif %}
{% set current_chamber_temp = printer['%s' % chamber_temp_sensor].temperature|int %}
{% set needs_heating = current_chamber_temp < (start_chamber_temp if start_chamber_temp > 0 else chamber_temp) %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_BEFORE_PREHEATING
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
{% if not is_from_start_print %}
MAYBE_HOME
{% endif %}
G0 Z{chamber_heater_air_circulation_z_pos} F{z_speed}
G0 Y{chamber_heater_air_circulation_y_pos} F{speed}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 1 else 0}
{% else %}
M106 S{(255 * chamber_heater_air_circulation_fan_speed)}
{% endif %}
{% else %}
{% if is_from_start_print %}
G0 Z{z} F{z_speed}
{% endif %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE={chamber_temp}
{% if needs_heating %}
M140 S{chamber_heater_bed_temp}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={chamber_heater_preheating_temp}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if needs_heating %}
_CHAMBER_HEATER_EXTRA_FAN_ON
{% endif %}
{% if needs_heating %}
TEMPERATURE_WAIT SENSOR="{chamber_temp_sensor}" MINIMUM={(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% endif %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED=0
_CHAMBER_FILTER_ON AT="before_print_start"
{% endif %}
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
G28 Z
{% endif %}
{% endif %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_AFTER_PREHEATING
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% if printer["heater_generic chamber_heater"] is defined %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined and chamber_heater_control_external_heater %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
_LED_SUCCESS
{% endif %}
[gcode_macro _CHAMBER_HEATER_OFF]
gcode =
RATOS_ECHO MSG="Deactivating chamber heater..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=0
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE=0
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
_CHAMBER_HEATER_EXTRA_FAN_OFF
[delayed_gcode _CHAMBER_HEATER_CONTROL]
initial_duration = 0.
gcode =
{% set chamber_temp = printer["gcode_macro _CHAMBER_HEATER_ON"].chamber_temp|default(0)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set current_chamber_temp = printer['temperature_sensor chamber'].temperature|int %}
{% if current_chamber_temp < chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if current_chamber_temp >= chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON]
gcode =
{% set chamber_heater_extra_fan_speed = printer["gcode_macro RatOS"].chamber_heater_extra_fan_speed|default(0.0)|float %}
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
{% if chamber_heater_extra_fan_speed > 0 %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED={chamber_heater_extra_fan_speed}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF]
gcode =
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED=0
{% endif %}
[gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING]
description = Will be executed before chamber preheating, only if heating is needed.
gcode =
[gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING]
description = Will be executed after chamber preheating, only if heating was needed.
gcode =
[gcode_macro _LED_START_PRINTING]
gcode =
_LED_ACTION
[gcode_macro _LED_START_PRINTING_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_PRINTING]
gcode =
_LED_ON TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_PAUSE]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_ON]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_OFF]
gcode =
_LED_STANDBY
[gcode_macro _LED_LOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_LOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_RUNOUT]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_CLOG]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_UNLOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_UNLOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_DEACTIVATE_TOOLHEAD]
gcode =
_LED_OFF TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_STANDBY]
gcode =
_LED_STANDBY TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_WAKEUP]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_MOTORS_OFF]
gcode =
_LED_STANDBY
_LED_VAOC_OFF
[gcode_macro _LED_INPUT_SHAPER_START]
gcode =
_LED_ACTION
[gcode_macro _LED_INPUT_SHAPER_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_START]
gcode =
_LED_ACTION
[gcode_macro _LED_BEACON_CALIBRATION_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_VAOC_ON]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=1.0 GREEN=1.0 BLUE=1.0
{% endif %}
[gcode_macro _LED_VAOC_OFF]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=0.0 GREEN=0.0 BLUE=0.0
{% endif %}
[gcode_macro _LED_ACTION]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_action %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SUCCESS]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_success %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_HEATING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_heating %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_COOLING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_cooling %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ERROR]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_error %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ON]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_on %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_OFF]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_off %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_STANDBY]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_standby %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
{% if toolhead >= 0 %}
{% if printer['neopixel nozzle_led_t%s' % toolhead] is defined %}
SET_LED LED={'nozzle_led_t%s' % toolhead} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% else %}
{% if printer['neopixel nozzle_led_t0'] is defined %}
SET_LED LED={'nozzle_led_t0'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% if printer['neopixel nozzle_led_t1'] is defined %}
SET_LED LED={'nozzle_led_t1'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% endif %}
_USER_LED_SET { rawparams }
[gcode_macro _USER_LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% if filament_name == '' or filament_type == '' %}
{% set filament_name = 'unknown' %}
{% set filament_type = 'unknown' %}
{% endif %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_LOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_LOAD_FILAMENT]
description = Load filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_LOAD_FILAMENT" MSG="TEMP={temp}"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=load_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
_LOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
RESTORE_GCODE_STATE NAME=load_state
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament load routine complete, please check that the filament was loaded correctly."
[gcode_macro _IDEX_LOAD_FILAMENT]
description = Load filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament into T{toolhead}..."
DEBUG_ECHO PREFIX="_IDEX_LOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
_LOAD_FILAMENT TOOLHEAD={toolhead} TEMP={temp} AUTOMATED={automated}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="Filament load routine for T{toolhead} complete, please check that the filament was loaded correctly."
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default(false)|lower == 'true' %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into hotend.."
G92 E0
G0 E{extruder_gear_to_cooling_position_distance} F{extruder_load_speed}
G92 E0
M400
RATOS_ECHO MSG="Filament loaded into hotend."
[gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set load_speed = printer["gcode_macro T%s" % toolhead].filament_load_speed|float * 60 %}
{% set filament_loading_nozzle_offset = printer["gcode_macro T%s" % toolhead].filament_loading_nozzle_offset|float %}
{% set cooling_position_to_nozzle_distance = printer["gcode_macro T%s" % toolhead].cooling_position_to_nozzle_distance|float %}
{% set purge_after_load = printer["gcode_macro T%s" % toolhead].purge_after_load|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into nozzle... Please wait!"
G92 E0
G0 E{cooling_position_to_nozzle_distance + filament_loading_nozzle_offset} F{load_speed}
G92 E0
G4 P1000
_PURGE_FILAMENT TOOLHEAD={toolhead} E={purge_after_load}
RATOS_ECHO MSG="Filament loaded into nozzle!"
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
{% set filament_grabbing_length = printer["gcode_macro T%s" % toolhead].filament_grabbing_length|float %}
{% set filament_grabbing_speed = printer["gcode_macro T%s" % toolhead].filament_grabbing_speed|float %}
{% set resume_after_insert = true if printer["gcode_macro T%s" % toolhead].resume_after_insert|default(true)|lower == 'true' else false %}
{% set enable_insert_detection = true if printer["gcode_macro T%s" % toolhead].enable_insert_detection|default(true)|lower == 'true' else false %}
{% set current_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% if enable_insert_detection %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="toolhead: {toolhead}, filament_grabbing_length: {filament_grabbing_length}, filament_grabbing_speed: {filament_grabbing_speed}, current_idex_mode: {current_idex_mode}"
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
RATOS_ECHO MSG="Filament inserted into T{toolhead}, loading..."
FORCE_MOVE STEPPER={'extruder%s' % ('' if toolhead == 0 else toolhead)} DISTANCE={filament_grabbing_length} VELOCITY={filament_grabbing_speed}
M400
{% if printer.pause_resume.is_paused %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% if resume_after_insert %}
RESUME
{% endif %}
{% else %}
{% if not printer.virtual_sdcard.is_active %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
[gcode_macro _PURGE_BEFORE_UNLOAD]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set purge_before_unload = printer["gcode_macro T%s" % toolhead].purge_before_unload|float %}
DEBUG_ECHO PREFIX="_PURGE_BEFORE_UNLOAD" MSG="TOOLHEAD: {toolhead}"
{% if purge_before_unload > 0 %}
G92 E0
G0 E{purge_before_unload} F300
G92 E0
M400
{% endif %}
[gcode_macro _PURGE_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set e = params.E|int %}
{% set r = params.R|default(0)|int %}
DEBUG_ECHO PREFIX="_PURGE_FILAMENT" MSG="TOOLHEAD: {toolhead}, E: {e}"
{% if e > 0 %}
G92 E0
G0 E{e} F300
G92 E0
M400
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={0.4 if toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={0.4 if toolhead == 1 else 0}
{% else %}
M106 S{(255 * 0.4)}
{% endif %}
{% endif %}
G4 P3000
{% if r > 0 %}
G92 E0
G0 E-{r} F300
G92 E0
M400
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{loading_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CLEANING_MOVE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_CLEANING_MOVE" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].parking_position is defined and printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% set cleaning_position = loading_position %}
{% if loading_position == parking_position %}
{% if loading_position > 0 %}
{% set cleaning_position = loading_position - 30 %}
{% else %}
{% set cleaning_position = loading_position + 30 %}
{% endif %}
{% endif %}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _BED_MESH_SANITY_CHECK]
gcode =
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is defined %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_start_print_true_zero_fuzzy_position %}
CONSOLE_ECHO TYPE="error" TITLE="Defined zero reference not compatible with fuzzy true zero" MSG="Using fuzzy start print true zero position is not compatible with a defined zero_reference_position value in the [bed_mesh] section in printer.cfg._N_Please remove the zero_reference_position value from the [bed_mesh] section, or disable fuzzy true zero position in printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_start_print_true_zero_fuzzy_position: False"
_STOP_AND_RAISE_ERROR MSG="Defined zero reference not compatible with fuzzy true zero"
{% elif zero_ref_pos[0]|float|round != safe_home_x|float|round or zero_ref_pos[1]|float|round != safe_home_y|float|round %}
CONSOLE_ECHO TYPE="error" TITLE="Zero reference position does not match safe home position" MSG="Please update your bed mesh zero reference position in printer.cfg, like so:_N__N_[bed_mesh]_N_zero_reference_position: {safe_home_x|float|round},{safe_home_y|float|round}_N_"
_STOP_AND_RAISE_ERROR MSG="Zero reference position does not match safe home position"
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if beacon_contact_bed_mesh %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact bed mesh is enabled" MSG="Beacon contact bed mesh is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_bed_mesh: False"
{% endif %}
{% if beacon_scan_method_automatic %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon 'automatic' scan method is enabled" MSG="Beacon 'automatic' scan method is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_scan_method_automatic: False"
{% endif %}
{% if beacon_contact_z_tilt_adjust %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact z-tilt adjust is enabled" MSG="Beacon contact z-tilt adjust is enabled. This is not recommended for normal use and may result in inaccurate z-tilt adjustment._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_z_tilt_adjust: False"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH]
gcode =
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE=None
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE=None
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION {rawparams}
{% endif %}
[gcode_macro _START_PRINT_BED_MESH]
variable_actual_true_zero_position_x = None
variable_actual_true_zero_position_y = None
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
SET_MACRO_TRAVEL_SETTINGS
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set X=[params.X0|default(-1)|float, params.X1|default(-1)|float] %}
{% set Y=[params.Y0|default(-1)|float, params.Y1|default(-1)|float] %}
DEBUG_ECHO PREFIX="_START_PRINT_BED_MESH" MSG="idex_mode: {idex_mode}, X: {X}, Y: {Y}"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is not defined %}
{% set zero_ref_pos = [safe_home_x if actual_true_zero_position_x is none else actual_true_zero_position_x, safe_home_y if actual_true_zero_position_y is none else actual_true_zero_position_y] %}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set X=[0, printable_x_max] %}
{% endif %}
{% set beacon_bed_mesh_scv = printer["gcode_macro RatOS"].beacon_bed_mesh_scv|default(25)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and not beacon_contact_bed_mesh %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={beacon_bed_mesh_scv}
{% endif %}
{% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %}
{% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %}
BED_MESH_CLEAR
{% if printer["gcode_macro RatOS"].adaptive_mesh|lower == 'true' %}
CALIBRATE_ADAPTIVE_MESH PROFILE="{default_profile}" X0={X[0]} X1={X[1]} Y0={Y[0]} Y1={Y[1]} T={params.T|int} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={idex_mode} ZERO_REF_POS_X={zero_ref_pos[0]} ZERO_REF_POS_Y={zero_ref_pos[1]}
{% else %}
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD="{default_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD="{printer["gcode_macro RatOS"].bed_mesh_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
[gcode_macro CALIBRATE_ADAPTIVE_MESH]
gcode =
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set default_profile = params.PROFILE %}
{% set x0 = params.X0|default(-1)|float %}
{% set y0 = params.Y0|default(-1)|float %}
{% set x1 = params.X1|default(-1)|float %}
{% set y1 = params.Y1|default(-1)|float %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Received coordinates X0={x0|round(1)} Y0={y0|round(1)} X1={x1|round(1)} Y1={y1|round(1)}"
{% if x0 >= x1 or y0 >= y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Invalid coordinates received. Please check your slicer settings. Falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if params.ZERO_REF_POS_X is defined and params.ZERO_REF_POS_Y is defined %}
{% set zero_ref_pos_x = params.ZERO_REF_POS_X|float %}
{% set zero_ref_pos_y = params.ZERO_REF_POS_Y|float %}
{% if zero_ref_pos_x < x0 or zero_ref_pos_x > x1 or zero_ref_pos_y < y0 or zero_ref_pos_y > y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Zero reference position X={zero_ref_pos_x|round(1)} Y={zero_ref_pos_y|round(1)} is outside the mesh region, expanding mesh region to include it."
{% set x0 = [x0, zero_ref_pos_x]|min %}
{% set y0 = [y0, zero_ref_pos_y]|min %}
{% set x1 = [x1, zero_ref_pos_x]|max %}
{% set y1 = [y1, zero_ref_pos_y]|max %}
{% endif %}
{% endif %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float %}
{% set mesh_x0 = [[x0, max_x]|min, min_x]|max %}
{% set mesh_y0 = [[y0, max_y]|min, min_y]|max %}
{% set mesh_x1 = [[x1, max_x]|min, min_x]|max %}
{% set mesh_y1 = [[y1, max_y]|min, min_y]|max %}
{% if mesh_x0 == min_x and mesh_y0 == min_y and mesh_x1 == max_x and mesh_y1 == max_y %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Print is using the full bed, falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% set probe_count_x = mesh_config.probe_count.split(",")[0]|int %}
{% if mesh_config.probe_count.split(",")|length == 2 %}
{% set probe_count_y = mesh_config.probe_count.split(",")[1]|int %}
{% else %}
{% set probe_count_y = mesh_config.probe_count.split(",")[0]|int %}
{% endif %}
{% set probe_x_step = (max_x - min_x) / probe_count_x %}
{% set probe_y_step = (max_y - min_y) / probe_count_y %}
{% set mesh_count_x = ([(mesh_x1 - mesh_x0) / probe_x_step, 3]|max)|int %}
{% set mesh_count_y = ([(mesh_y1 - mesh_y0) / probe_y_step, 3]|max)|int %}
{% set min_mesh_count = [mesh_count_x, mesh_count_y]|min %}
{% set max_mesh_count = [mesh_count_x, mesh_count_y]|max %}
{% set algorithm = mesh_config.algorithm %}
{% if algorithm|lower == 'lagrange' and max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="cannot exceed a probe_count of 6 when using lagrange interpolation. Falling back to bicubic interpolation."
{% set algorithm = 'bicubic' %}
{% endif %}
{% if algorithm|lower == 'bicubic' and min_mesh_count < 4 %}
{% if max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="invalid probe_count option when using bicubic interpolation. Combination of 3 points on one axis with more than 6 on another is not permitted. Forcing minimum mesh count to be 4."
{% set min_mesh_count = 4 %}
{% else %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="bicubic interpolation with a probe_count of less than 4 points detected. Forcing lagrange interpolation."
{% set algorithm = 'lagrange' %}
{% endif %}
{% endif %}
{% set mesh_count_x = ([min_mesh_count, mesh_count_x]|max)|int %}
{% set mesh_count_x = ([max_mesh_count, mesh_count_x]|min)|int %}
{% set mesh_count_y = ([min_mesh_count, mesh_count_y]|max)|int %}
{% set mesh_count_y = ([max_mesh_count, mesh_count_y]|min)|int %}
{% set should_prime = printer["gcode_macro RatOS"].nozzle_priming == 'primeblob' %}
{% if printer["dual_carriage"] is not defined %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% else %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 == 0 and not probe_first %}
{% set probe_first = true %}
{% endif %}
{% if should_prime and probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="mesh coordinates X0={mesh_x0|round(1)} Y0={mesh_y0|round(1)} X1={mesh_x1|round(1)} Y1={mesh_y1|round(1)}"
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y} RELATIVE_REFERENCE_INDEX=-1
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% if should_prime and not probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M84]
rename_existing = M84.1
gcode =
M84.1
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_OFFSET X=0 Y=0
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=SET_PRESSURE_ADVANCE VARIABLE=snyc_toolheads VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro _VAOC"] is defined %}
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started VALUE=False
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started_at_temp VALUE=False
{% endif %}
_IDEX_SINGLE INIT=1
{% endif %}
SET_SKEW CLEAR=1
_LED_MOTORS_OFF
[gcode_macro M104]
rename_existing = M104.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
DEBUG_ECHO PREFIX="M104" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set temperature_offset_t0 = printer["gcode_macro T0"].temperature_offset|default(0)|int %}
{% set temperature_offset_t1 = printer["gcode_macro T1"].temperature_offset|default(0)|int %}
{% set s0 = [s + temperature_offset_t0, 0]|max %}
{% set s1 = [s + temperature_offset_t1, 0]|max %}
{% if temperature_offset_t0 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t0}°C added to toolhead T0."
{% endif %}
{% if temperature_offset_t1 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t1}°C added to toolhead T1."
{% endif %}
{% else %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% else %}
M104.1 S{s} T{t}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M109]
rename_existing = M109.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
DEBUG_ECHO PREFIX="M109" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M109" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
M109.1 S{s} T{t}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro SET_HEATER_TEMPERATURE]
rename_existing = SET_HEATER_TEMPERATURE_BASE
gcode =
{% set heater = params.HEATER|default("") %}
{% set target = params.TARGET|default(0)|int %}
DEBUG_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="heater: {heater}, target: {target}"
{% set t = -1 %}
{% if heater|lower == "extruder" or heater|lower == "extruder1" %}
{% set t = 0 if heater|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and target > 0 %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set target = [target + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
SET_HEATER_TEMPERATURE_BASE HEATER="{heater}" TARGET={target}
{% if t != -1 and printer.fastconfig.settings.beacon is defined %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro TEMPERATURE_WAIT]
rename_existing = TEMPERATURE_WAIT_BASE
gcode =
{% set sensor = params.SENSOR|default("") %}
{% set minimum = params.MINIMUM|default(-1)|int %}
{% set maximum = params.MAXIMUM|default(-1)|int %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="sensor: {sensor}, minimum: {minimum}, maximum: {maximum}"
{% set t = -1 %}
{% if sensor|lower == "extruder" or sensor|lower == "extruder1" %}
{% set t = 0 if sensor|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and (minimum > 0 or maximum > 0) %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% if minimum > -1 %}
{% set minimum = [minimum + temperature_offset, 0]|max %}
{% endif %}
{% if maximum > -1 %}
{% set maximum = [maximum + temperature_offset, 0]|max %}
{% endif %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set id = "sensor " ~ sensor if t == -1 else "toolhead T" ~ t %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum} MAXIMUM={maximum}
{% elif minimum > -1 and maximum == -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum}
{% elif minimum == -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% else %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="neither MINIMUM or MAXIMUM args were specified, call TEMPERATURE_WAIT_BASE is expected to fail"
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}"
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for {id} reached."
[gcode_macro SDCARD_PRINT_FILE]
rename_existing = SDCARD_PRINT_FILE_BASE
gcode =
{% if printer["ratos"] is defined %}
PROCESS_GCODE_FILE { rawparams }
{% else %}
SDCARD_PRINT_FILE_BASE { rawparams }
{% endif %}
[gcode_macro SKEW_PROFILE]
rename_existing = SKEW_PROFILE_BASE
variable_loaded_profile = ""
gcode =
{% if params.LOAD is defined %}
{% if printer.fastconfig.settings["skew_correction %s" % params.LOAD] is defined %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='"{params.LOAD}"'
{% endif %}
{% endif %}
SKEW_PROFILE_BASE { rawparams }
[gcode_macro SET_SKEW]
rename_existing = SET_SKEW_BASE
gcode =
{% if params.CLEAR is defined %}
{% if params.CLEAR|default(0)|int == 1 %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='""'
{% endif %}
{% endif %}
SET_SKEW_BASE { rawparams }
[gcode_macro SET_VELOCITY_LIMIT]
rename_existing = SET_VELOCITY_LIMIT_BASE
gcode =
{% if params.ACCEL_TO_DECEL is defined %}
{% if params.ACCEL is defined %}
{% set accel = params.ACCEL|float %}
{% else %}
{% set accel = printer.toolhead.max_accel|float %}
{% endif %}
{% if params.VELOCITY is defined %}
{% set velocity = params.VELOCITY|float %}
{% else %}
{% set velocity = printer.toolhead.max_velocity|float %}
{% endif %}
{% if params.SQUARE_CORNER_VELOCITY is defined %}
{% set scv = params.SQUARE_CORNER_VELOCITY|float %}
{% else %}
{% set scv = printer.toolhead.square_corner_velocity|float %}
{% endif %}
{% set mcr = params.ACCEL_TO_DECEL|float / accel %}
DEBUG_ECHO PREFIX="SET_VELOCITY_LIMIT" MSG="ACCEL={accel}, VELOCITY={velocity}, SQUARE_CORNER_VELOCITY={scv}, MINIMUM_CRUISE_RATIO={mcr}"
SET_VELOCITY_LIMIT_BASE ACCEL={accel} VELOCITY={velocity} SQUARE_CORNER_VELOCITY={scv} MINIMUM_CRUISE_RATIO={1-mcr}
{% else %}
SET_VELOCITY_LIMIT_BASE { rawparams }
{% endif %}
[gcode_macro BED_MESH_CALIBRATE]
rename_existing = _BED_MESH_CALIBRATE_BASE
variable_abl_and_home_z_if_required = True
gcode =
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% if abl_and_home_z_if_required %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set beacon_default_probe_method = printer.fastconfig.settings.beacon.default_probe_method|default('proximity') %}
{% set probe_method = params.PROBE_METHOD|default(beacon_default_probe_method)|lower %}
{% if probe_method == 'proximity' %}
_CHECK_ACTIVE_BEACON_MODEL_TEMP TITLE="Bed mesh calibration warning"
{% endif %}
{% endif %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_BED_MESH_CALIBRATE_BASE {rawparams}
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_APPLY_RATOS_BED_MESH_PARAMETERS {rawparams}
{% endif %}
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_BASE
gcode =
DEBUG_ECHO PREFIX="SET_GCODE_OFFSET" MSG="{rawparams|replace('"', '')|replace("'", '')}"
{% set z_before = printer.gcode_move.homing_origin.z|float %}
SET_GCODE_OFFSET_BASE {rawparams}
_AFTER_SET_GCODE_OFFSET Z_BEFORE={z_before}
[gcode_macro _AFTER_SET_GCODE_OFFSET]
gcode =
{% set z_before = params.Z_BEFORE|float %}
{% set z_after = printer.gcode_move.homing_origin.z|float %}
{% if z_before != z_after %}
_ALERT_NON_ZERO_Z_OFFSET FORCE=1
{% endif %}
[gcode_macro _START_PRINT_PARK]
gcode =
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_x = printer["gcode_macro RatOS"].start_print_park_x %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% endif %}
{% if printer["dual_carriage"] is defined and not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% if printer["gcode_macro RatOS"].start_print_park_x is defined and printer["gcode_macro RatOS"].start_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="start_print_park_x is ignored for IDEX printers"
{% endif %}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={start_print_park_in} X={start_print_park_x}
G0 Z{z} F{z_speed}
[gcode_macro _END_PRINT_PARK]
gcode =
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro RatOS"].end_print_park_x is defined and printer["gcode_macro RatOS"].end_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="end_print_park_x is ignored for IDEX printers"
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x}
[gcode_macro _PARK]
gcode =
{% set x = params.X %}
{% set location = params.LOCATION|default('back')|lower %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set nozzle_priming = printer["gcode_macro RatOS"].nozzle_priming|lower %}
CACHE_TOOLHEAD_SETTINGS KEY="park"
SET_MACRO_TRAVEL_SETTINGS
{% if x != '' %}
{% if x|float >= printer.toolhead.axis_minimum.x + 5 and x|float <= printable_x_max - 5 %}
{% set park_x = x|float %}
{% else %}
{action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% else %}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% set park_y = printable_y_max - 15 %}
{% if location == 'front' %}
{% set park_y = printer.toolhead.axis_minimum.y + 5 %}
{% elif location == 'center' %}
{% set park_y = printable_y_max / 2 %}
{% elif location == 'primeblob' and printer["dual_carriage"] is defined %}
{% set park_y = printable_y_max - 15 %}
{% endif %}
{% if location == 'primeblob' and printer["dual_carriage"] is not defined %}
{% if (nozzle_priming == 'primeblob' or nozzle_priming == 'primeline') %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set park_x = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set park_x = printable_x_max - 5 %}
{% else %}
{% set park_x = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set park_y = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set park_y = printable_y_max - 5 %}
{% else %}
{% set park_y = nozzle_prime_start_y|float %}
{% endif %}
{% endif %}
{% endif %}
G90
{% if printer["dual_carriage"] is not defined %}
G0 X{park_x} Y{park_y} F{speed}
{% else %}
G0 Y{park_y} F{speed}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="park"
[gcode_macro SAVE_PROBE_RESULT]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
{% set last_z_offset = 9999.9 %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set current_z = printer.toolhead.position.z|float %}
{% if beacon_contact_prime_probing %}
{% set last_z_offset = printer.beacon.last_z_result %}
{% else %}
{% set last_z_offset = printer.beacon.last_sample.dist - current_z %}
{% endif %}
{% elif printer.fastconfig.settings.bltouch is defined %}
{% set config_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set config_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Saving offset adjustment of {last_z_offset} in {params.VARIABLE|default('last_z_offset')}"
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE={params.VARIABLE|default('last_z_offset')} VALUE={last_z_offset}
[gcode_macro PROBE_FOR_PRIMING]
gcode =
{% set probe_for_priming_disable_mesh_constraints = true if printer["gcode_macro RatOS"].probe_for_priming_disable_mesh_constraints|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower != 'false' %}
SAVE_GCODE_STATE NAME=probe_for_priming_state
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the prime location.."
CACHE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
SET_MACRO_TRAVEL_SETTINGS
{% set t = params.TOOLHEAD|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% if idex_mode == '' %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% if t == 0 %}
{% set x_start = 5 %}
{% else %}
{% set x_start = printable_x_max - 5 %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% endif %}
{% endif %}
{% set z = printer.fastconfig.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% if printer.fastconfig.settings.bltouch is defined %}
{% set x_offset = printer.fastconfig.settings.bltouch.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.bltouch.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set x_offset = printer.fastconfig.settings.probe.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.probe.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% elif printer.fastconfig.settings.beacon is defined %}
{% set x_offset = printer.fastconfig.settings.beacon.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.beacon.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.beacon.trigger_distance|float %}
{% else %}
{ action_raise_error("No probe, beacon or bltouch section found. Adaptive priming only works with a [probe], [beacon] or [bltouch] section defined.") }
{% endif %}
{% if z < z_offset %}
{ action_raise_error("Horizontal move Z ({z}) is below your probe's Z offset ({z_offset}). Please adjust your horizontal_move_z setting in [bed_mesh] to be above {z}.") }
{% endif %}
{% if not probe_for_priming_disable_mesh_constraints %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float - x_offset %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float - y_offset %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float - x_offset %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float - y_offset %}
{% set x_start = [[x_start, max_x]|min, min_x]|max %}
{% set y_start = [[y_start, max_y]|min, min_y]|max %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the start of the prime location at {x_start}, {y_start}"
G90
M83
G0 Z{z} F{z_speed}
G1 X{x_start} Y{y_start} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result
{% endif %}
{% if idex_mode == '' %}
{% set x_end = x_start %}
{% set y_end = y_start + 45 %}
{% else %}
{% if t==1 %}
{% set x_end = x_start - 45 %}
{% else %}
{% set x_end = x_start + 45 %}
{% endif %}
{% set y_end = y_start %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the end of the prime location at {x_end}, {y_end}"
G1 X{x_end} Y{y_end} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result
{% endif %}
RESTORE_GCODE_STATE NAME=probe_for_priming_state
RESTORE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
{% endif %}
[gcode_macro RESET_PRIME_PROBE_STATE]
gcode =
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result VALUE=None
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result_t1 VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result_t1 VALUE=None
{% endif %}
[gcode_macro PROBE_CURRENT_POSITION]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
SAVE_GCODE_STATE NAME=probe_current_position_state
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
ASSERT_PROBE_DEPLOYED
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
BEACON_QUERY
{% else %}
RESTORE_GCODE_STATE NAME=probe_current_position_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_z_speed|float}
{% endif %}
[gcode_macro PRIME_BLOB]
description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro.
variable_x_offset = 5
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="prime_blob"
SET_MACRO_TRAVEL_SETTINGS
RATOS_ECHO PREFIX="Priming" MSG="Priming nozzle with prime blob.."
{% set current_toolhead = 0 %}
{% set target_idex_mode = '' %}
{% set extruder = 'extruder' %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE is defined %}
{% set target_idex_mode = params.IDEX_MODE|default('')|lower %}
{% else %}
{ action_raise_error("IDEX_MODE parameter not found for PRIME_BLOB macro. This is likely a bug.") }
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Priming in IDEX {target_idex_mode} mode.."
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set current_toolhead = 1 if current_idex_mode=='primary' else 0 %}
{% set extruder = 'extruder1' if current_toolhead == 1 else 'extruder' %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
SAVE_GCODE_STATE NAME=prime_blob_state
{% endif %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|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 fan_speed = printer["gcode_macro RatOS"].nozzle_prime_bridge_fan|float %}
{% set nozzle_diameter = printer.fastconfig.settings[extruder].nozzle_diameter|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set has_start_offset_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) != 9999.9 %}
{% if printer["dual_carriage"] is defined %}
{% set has_start_offset_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) != 9999.9 %}
{% endif %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_z_height = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set nozzle_prime_direction = printer["gcode_macro RatOS"].nozzle_prime_direction|lower %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% if target_idex_mode == '' %}
{% set x_factor = 0 %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% set y_factor = 1 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% set y_factor = -1 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% if nozzle_prime_start_y|float < printable_y_max / 2 %}
{% set y_factor = 1 %}
{% else %}
{% set y_factor = -1 %}
{% endif %}
{% endif %}
{% if nozzle_prime_direction == 'forwards' %}
{% set y_factor = 1 %}
{% elif nozzle_prime_direction == 'backwards' %}
{% set y_factor = -1 %}
{% endif %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% else %}
{% set z = start_print_park_z_height %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% set y_factor = 0 %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set x_start = center_x / 2 + 5 %}
{% set x_factor = 1 %}
{% else %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% if current_toolhead == 0 %}
{% set x_start = 55 %}
{% set x_factor = -1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 55 %}
{% set x_factor = 1 %}
{% endif %}
{% else %}
{% if current_toolhead == 0 %}
{% set x_start = 5 %}
{% set x_factor = 1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 5 %}
{% set x_factor = -1 %}
{% endif %}
{% endif %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_x_max - 5 %}
{% endif %}
{% set z = 10 %}
{% endif %}
{% set start_z_offset = 0 %}
{% set end_z_offset = 0 %}
{% if has_start_offset_t0 %}
{% set start_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %}
{% set end_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_end_result|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t0) ) }
{% endif %}
{% if end_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t0) ) }
{% endif %}
{% set start_z_offset = start_z_probe_result_t0 %}
{% set end_z_offset = end_z_probe_result_t0 %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if current_toolhead == 1 or both_toolheads or target_idex_mode == "copy" or target_idex_mode == "mirror" %}
{% if has_start_offset_t1 %}
{% set start_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) %}
{% set end_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_end_result_t1|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t1) ) }
{% endif %}
{% if end_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t1) ) }
{% endif %}
{% set start_z_offset = [start_z_offset, start_z_probe_result_t1]|max %}
{% set end_z_offset = [end_z_offset, start_z_probe_result_t1]|max %}
{% endif %}
{% endif %}
{% if target_idex_mode != 'copy' and target_idex_mode != 'mirror' %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% set original_start_z_offset = start_z_offset %}
{% set original_end_z_offset = end_z_offset %}
{% set start_z_offset = original_end_z_offset %}
{% set end_z_offset = original_start_z_offset %}
{% endif %}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
DEBUG_ECHO PREFIX="PRIME_BLOB" MSG="x_start: {x_start}, y_start: {y_start}, x_factor: {x_factor}, y_factor: {y_factor}, z: {z}, start_z_offset: {start_z_offset}, end_z_offset: {end_z_offset}"
G90
M83
RATOS_ECHO PREFIX="Priming" MSG="Lifting Z to {z}.."
G0 Z{z} F{z_speed}
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% if start_print_park_in != 'primeblob' %}
G1 X{x_start} F{speed}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% endif %}
{% else %}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% if target_idex_mode=="copy" or target_idex_mode=="mirror" %}
RATOS_ECHO PREFIX="Priming" MSG="Mirroring move to {x_start}, {y_start} along the edge of the print area.."
_IDEX_MIRROR PRIMING=1
{% else %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% endif %}
G1 X{x_start} F{speed}
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Starting prime blob.."
G1 Z{0.5 + start_z_offset} F{z_speed}
G1 Y{y_start} F{speed}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
M106 S{fan_speed}
G1 Z5 F100 E5
G92 E0
RATOS_ECHO PREFIX="Priming" MSG="Bridging with {((fan_speed/255) * 100)|int}% fan speed.."
G1 F3000 X{x_start + (15 * x_factor)} Y{y_start + (15 * y_factor)} E{1 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (20 * x_factor)} Y{y_start + (20 * y_factor)} Z{3.8 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (34 * x_factor)} Y{y_start + (34 * y_factor)} Z{2.6 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (38 * x_factor)} Y{y_start + (38 * y_factor)} Z{1.4 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (42 * x_factor)} Y{y_start + (42 * y_factor)} Z{0.2 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
M106 S0
G1 F3000 X{x_start + (46 * x_factor)} Y{y_start + (46 * y_factor)} Z{0.2 + end_z_offset} E0.6
G1 F{speed} X{x_start + (50 * x_factor)} Y{y_start + (50 * y_factor)}
{% if target_idex_mode == "copy" or target_idex_mode == "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if target_idex_mode == "copy" %}
{% if first_y >= 0 %}
_IDEX_COPY DANCE=0 Y={first_y}
{% else %}
_IDEX_COPY DANCE=0 Y={params.Y1}
{% endif %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
RESTORE_GCODE_STATE NAME=prime_blob_state
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="prime_blob"
G92 E0
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_UNLOAD_FILAMENT]
description = Unload filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_UNLOAD_FILAMENT" MSG="TEMP: {temp}"
_LED_UNLOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=unload_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD=0 NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
{% endif %}
RESTORE_GCODE_STATE NAME=unload_state
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament unloading completed"
[gcode_macro _IDEX_UNLOAD_FILAMENT]
description = Unload filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading T{toolhead} filament..."
DEBUG_ECHO PREFIX="_IDEX_UNLOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} AUTOMATED={automated}
{% endif %}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="T{toolhead} filament unloading completed"
[gcode_macro _UNLOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LEGACY_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 =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set unload_speed = 5 * 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 F6000
G0 E-15 F6000
G0 E-{unload_length} F{unload_speed}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Unloading filament from nozzle to cooling zone... Please wait!"
_PURGE_BEFORE_UNLOAD TOOLHEAD={toolhead}
{% if printer["gcode_macro _UNLOAD_WITHOUT_TIP_FORMING"] is defined %}
_UNLOAD_WITHOUT_TIP_FORMING TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
{% else %}
_UNLOAD_WITH_TIP_FORMING NAME='{filament_name}' TYPE='{filament_type}'
{% endif %}
G4 P3000
[gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
{% set tooolhead_sensor_to_extruder_gear_distance = printer["gcode_macro T%s" % toolhead].tooolhead_sensor_to_extruder_gear_distance|float %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER" MSG="TOOLHEAD: {toolhead}"
G0 E-{extruder_gear_to_cooling_position_distance + tooolhead_sensor_to_extruder_gear_distance + 50} F{extruder_load_speed}
RATOS_ECHO MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_WITH_TIP_FORMING]
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% if filament_name != '' and filament_type != '' %}
_UNLOAD_KNOWN_FILAMENT NAME={filament_name} TYPE={filament_type}
{% else %}
_UNLOAD_UNKNOWN_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _UNLOAD_KNOWN_FILAMENT]
description = User overrideable tip forming macro if slicer filament profiles are known
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
RATOS_ECHO PREFIX="FILAMENT TYPE" MSG='{filament_type}'
RATOS_ECHO PREFIX="FILAMENT PROFILE" MSG='{filament_name}'
{% if filament_name == "Prusament PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% elif filament_name == "Nobufil PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% else %}
RATOS_ECHO PREFIX="_UNLOAD_KNOWN_FILAMENT" MSG="Filament profile not found!"
_UNLOAD_UNKNOWN_FILAMENT
{% endif %}
[gcode_macro _UNLOAD_UNKNOWN_FILAMENT]
description = User overrideable standard tip forming macro
gcode =
DEBUG_ECHO PREFIX="_UNLOAD_UNKNOWN_FILAMENT" MSG="Using standard tip forming macro!"
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
[gcode_macro _TIP_FORMING]
gcode =
{% set cooling_moves = params.COOLING_MOVES|default(4)|int %}
{% set cooling_move_length = params.COOLING_MOVE_LENGTH|default(10)|float %}
{% set start_cooling_speed = params.START_COOLING_SPEED|default(10)|float * 60 %}
{% set end_cooling_speed = params.END_COOLING_SPEED|default(50)|float * 60 %}
{% if cooling_moves == 0 %}
{% set cooling_move_length = 0 %}
{% endif %}
{% set dip = true if params.DIP|default(false)|lower == "true" else false %}
{% set dip_length = params.DIP_LENGTH|default(22)|float %}
{% set dip_speed = params.DIP_SPEED|default(30)|float * 60 %}
{% set dip_retract_speed = params.DIP_RETRACT_SPEED|default(70)|float * 60 %}
{% set retract_length = params.RETRACT_LENGTH|default(18)|float %}
{% set start_retract_speed = params.START_RETRACT_SPEED|default(120)|float * 60 %}
{% set end_retract_speed = params.END_RETRACT_SPEED|default(20)|float * 60 %}
DEBUG_ECHO PREFIX="_TIP_FORMING" MSG="cooling_moves: {cooling_moves}, cooling_move_length: {cooling_move_length}, start_cooling_speed: {start_cooling_speed}, end_cooling_speed: {end_cooling_speed}, dip: {dip}, dip_length: {dip_length}, dip_speed: {dip_speed}, dip_retract_speed: {dip_retract_speed}, retract_length: {retract_length}, start_retract_speed: {start_retract_speed}, end_retract_speed: {end_retract_speed}"
M220 S100
G92 E0
{% set retract = retract_length + cooling_move_length / 2 - 15 %}
G1 E-15 F{start_retract_speed}
G1 E-{0.7 * retract} F{1.0 * end_retract_speed}
G1 E-{0.2 * retract} F{0.5 * end_retract_speed}
G1 E-{0.1 * retract} F{0.3 * end_retract_speed}
G92 E0
{% if cooling_moves > 0 %}
{% set i = (end_cooling_speed - start_cooling_speed) / (2 * cooling_moves - 1) %}
{% for m in range(cooling_moves) %}
G1 E{cooling_move_length} F{(start_cooling_speed + i * m * 2)}
G1 E-{cooling_move_length} F{(start_cooling_speed + i * (m * 2 + 1))}
{% endfor %}
{% endif %}
G92 E0
{% if dip %}
G1 E{dip_length} F{dip_speed}
G4 P100
G1 E-{dip_length} F{dip_retract_speed}
{% endif %}
G92 E0
M400
[delayed_gcode __ON_FILAMENT_SENSOR_BUTTON_PRESSED_STARTUP_GUARD]
initial_duration = 2.
gcode =
SET_GCODE_VARIABLE MACRO=_ON_FILAMENT_SENSOR_BUTTON_PRESSED VARIABLE=startup_complete VALUE=True
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
variable_startup_complete = False
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set toolhead_sensor_button_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_sensor_button_only_when_sensor_enabled|default(false)|lower == 'true' %}
{% if not startup_complete and sensor_enabled %}
{action_emergency_stop("RatOS: The T%s filament sensor button was triggered immediately on printer startup. This is likely a false trigger. Please check your filament sensor wiring and configuration!" % (toolhead,))}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}, SENSOR_ENABLED: {sensor_enabled}, TOOLHEAD_SENSOR_BUTTON_ONLY_WHEN_SENSOR_ENABLED: {toolhead_sensor_button_only_when_sensor_enabled}"
{% if not printer.virtual_sdcard.is_active and (sensor_enabled or not toolhead_sensor_button_only_when_sensor_enabled) %}
UNLOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
{% set toolhead_detect_clog_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_detect_clog_only_when_sensor_enabled|default(true)|lower == 'true' %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}, ENABLE_CLOG_DETECTION: {enable_clog_detection}, TOOLHEAD_DETECT_CLOG_ONLY_WHEN_SENSOR_ENABLED: {toolhead_detect_clog_only_when_sensor_enabled}, SENSOR_ENABLED: {sensor_enabled}"
{% if enable_clog_detection and (sensor_enabled or not toolhead_detect_clog_only_when_sensor_enabled) %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_FILAMENT_END]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set clogged = true if params.CLOGGED|default(false)|lower == 'true' else false %}
{% set unload_after_runout = printer["gcode_macro T%s" % toolhead].unload_after_runout|float %}
{% if clogged %}
_LED_FILAMENT_CLOG TOOLHEAD={toolhead}
{% else %}
_LED_FILAMENT_RUNOUT TOOLHEAD={toolhead}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_END" MSG="TOOLHEAD: {toolhead}"
{% if printer.virtual_sdcard.is_active %}
{% if not printer.pause_resume.is_paused %}
PAUSE RUNOUT=True
{% endif %}
{% if not clogged and unload_after_runout %}
UNLOAD_FILAMENT TOOLHEAD={toolhead} AUTOMATED=True
{% endif %}
{% if not clogged and printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true'%}
_JOIN_SPOOL TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M600]
description = Executes a color change by pausing the printer an unloading the filament.
gcode =
PAUSE
UNLOAD_FILAMENT AUTOMATED=True
RATOS_ECHO MSG="Please load new filament and resume"
[gcode_macro COLD_PULL]
description = Automated hotend cold pull.
gcode =
{% set extrusion_temp = params.EXTRUSION_TEMP|default(220)|int %}
{% set cold_pull_temp = params.COLD_PULL_TEMP|default(80)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% if printer["dual_carriage"] is not defined %}
{% set toolhead = 0 %}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead != 0 and toolhead != 1 %}
{action_raise_error("Please select toolhead! 0 = left, 1 = right toolhead")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
RATOS_ECHO MSG="Starting cold pull on T{toolhead}..."
{% else %}
RATOS_ECHO MSG="Starting cold pull..."
{% endif %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if printer["dual_carriage"] is defined and "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
RATOS_ECHO MSG="Heating T{toolhead} to {extrusion_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={extrusion_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={extrusion_temp} MAXIMUM={extrusion_temp + 2}
G4 P3000
RATOS_ECHO MSG="extruding..."
G92 E0
G1 E30 F300
G92 E0
RATOS_ECHO MSG="Cooling T{toolhead} to {cold_pull_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={cold_pull_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={cold_pull_temp} MAXIMUM={cold_pull_temp + 2}
G4 P10000
RATOS_ECHO MSG="cold pull..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-40 VELOCITY=5 ACCEL=100
RATOS_ECHO MSG="eject filament..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-200 VELOCITY=20 ACCEL=500
RATOS_ECHO MSG="cooling down extruder..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET=0
RESTORE_GCODE_STATE NAME=cold_pull_state
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
CONSOLE_ECHO TITLE="Cold pull complete" MSG="Please remove the filament from the PTFE tube and cut the end off. Do NOT try to load it again." TYPE="warning"
[gcode_macro _USER_START_PRINT_BEFORE_HOMING]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_BED]
gcode =
[gcode_macro _USER_START_PRINT_BED_MESH]
gcode =
[gcode_macro _USER_START_PRINT_PARK]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
[gcode_macro _USER_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 =
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
[gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_PARK]
gcode =
[gcode_macro _USER_END_PRINT_FINISHED]
description = User hook for when the print is finished after gcode state has been restored.
gcode =
[gcode_macro _USER_START_PRINT]
gcode =
[gcode_macro _USER_END_START_PRINT]
gcode =
[gcode_macro _USER_START_FEATURE]
gcode =
[gcode_macro _USER_END_FEATURE]
gcode =
[gcode_macro _USER_BEFORE_IDLE_TIMEOUT]
gcode =
[gcode_macro _USER_AFTER_IDLE_TIMEOUT]
gcode =
[gcode_macro ECHO_T_VARS]
description = Echo Toolhead variables to the console.
gcode =
{% set t = params.T|default(0) %}
RATOS_ECHO MSG="T{t} Variables"
{% for var, value in printer["gcode_macro T%s" % t].items() %}
{action_respond_info(var ~ ": " ~ value)}
{% endfor %}
[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 ENSURE_CRITICAL_RATOS_INIT]
variable_completed = False
gcode =
{% if not completed %}
CALCULATE_PRINTABLE_AREA
SET_GCODE_VARIABLE MACRO=ENSURE_CRITICAL_RATOS_INIT VARIABLE=completed VALUE=True
{% endif %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
{action_respond_info("Initializing RatOS...")}
ENSURE_CRITICAL_RATOS_INIT
_LED_STANDBY
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
{% if printer.fastconfig.settings.beacon is defined %}
_BED_MESH_SANITY_CHECK
{% endif %}
{% set svv = printer.save_variables.variables %}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=0 C={svv.nozzle_expansion_coefficient_t0|default(0.06)|float}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=1 C={svv.nozzle_expansion_coefficient_t1|default(0.06)|float}
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=idex_applied_offset
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
ENSURE_CRITICAL_RATOS_INIT
HELLO_RATOS
_ALERT_NON_ZERO_Z_OFFSET
[gcode_macro _ALERT_NON_ZERO_Z_OFFSET]
gcode =
{% set force = params.FORCE|default(0)|int == 1 %}
{% set user_offset = printer.named_offsets.user_probe_z_offset.z|float %}
{% set gcode_offset = printer.gcode_move.homing_origin.z|float %}
{% set combined_offset = user_offset + gcode_offset %}
{% if force or user_offset != 0 or gcode_offset != 0 %}
{% set title = "User-adjusted Z-offset of %.3f mm is active" % combined_offset %}
{% set msg = "" %}
{% set nl = "" %}
{% if user_offset != 0 %}
{% set msg = msg + "beacon true zero user Z-offset: %.3f mm (to clear, use Z_OFFSET_APPLY_PROBE CLEAR=1)" % user_offset %}
{% set nl = "_N_" %}
{% endif %}
{% if gcode_offset != 0 %}
{% set msg = msg + nl + "G-code Z-offset: %.3f mm" % gcode_offset %}
{% endif %}
CONSOLE_ECHO TITLE="{title}" TYPE="info" MSG="{msg}"
{% endif %}
[gcode_macro _INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE]
gcode =
{% set variable = params.VARIABLE|string %}
{% set svv = printer.save_variables.variables %}
{% set nlu_msg = "no longer used, please remove" %}
{% if svv[variable] is defined %}
{% set v = svv[variable]|string|replace('"', '')|replace("'", "") %}
{% if not nlu_msg in v %}
SAVE_VARIABLE VARIABLE={variable} VALUE='"{nlu_msg} (was {v})"'
{% endif %}
CONSOLE_ECHO TITLE="Deprecated ratos-variables.cfg variable" TYPE="warning" MSG="The variable {variable} is no longer used, please remove it from your ratos-variables.cfg file."
{% endif %}
[gcode_macro _NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK]
gcode =
{% set t = params.T|int %}
{% set c = params.C|float %}
{% set normal_low = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_low|default(0.05)|float %}
{% set normal_high = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_high|default(0.10)|float %}
{% if c < 0 %}
{action_emergency_stop("Invalid nozzle_expansion_coefficient_t%s value in ratos-variables.cfg: %.3f. It must be non-negative." % (t, c))}
{% endif %}
{% if c >= normal_high %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite high. Please verify that this is correct."
{% endif %}
{% if c <= normal_low %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite low. Please verify that this is correct."
{% endif %}
[gcode_macro INITIAL_FRONTEND_UPDATE]
gcode =
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_error = printer["gcode_macro RatOS"].status_color_error|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_unknown}"'
{% endif %}
{% set t0_sensor = "undefined" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].filament_detected|lower == "true" %}
{% set t0_sensor = "detected" %}
{% else %}
{% set t0_sensor = "empty" %}
{% endif %}
{% else %}
{% set t0_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set t1_sensor = "undefined" %}
{% if printer["dual_carriage"] is defined and printer["filament_switch_sensor toolhead_filament_sensor_t1"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].filament_detected|lower == "true" %}
{% set t1_sensor = "detected" %}
{% else %}
{% set t1_sensor = "empty" %}
{% endif %}
{% else %}
{% set t1_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% if svv.t0_filament is defined and printer["gcode_macro T0"] is defined %}
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
{% if t0_sensor != "empty" %}
{% set t0_filament_type = svv.t0_filament[0]|default('')|string %}
{% set t0_filament_name = svv.t0_filament[1]|default('')|string %}
{% set t0_filament_temp = svv.t0_filament[2]|default(0)|float %}
{% if t0_filament_name != '' and t0_filament_type != '' and t0_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{t0_filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{t0_filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={t0_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
{% if svv.t1_filament is defined and printer["gcode_macro T1"] is defined %}
{% if printer["gcode_macro T1"].filament_name is defined and printer["gcode_macro T1"].filament_type is defined and printer["gcode_macro T1"].filament_temp is defined %}
{% if t1_sensor != "empty" %}
{% set t1_filament_type = svv.t1_filament[0]|default('')|string %}
{% set t1_filament_name = svv.t1_filament[1]|default('')|string %}
{% set t1_filament_temp = svv.t1_filament[2]|default(0)|float %}
{% if t1_filament_name != '' and t1_filament_type != '' and t1_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='"{t1_filament_name}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='"{t1_filament_type}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE={t1_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t1_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro CALCULATE_PRINTABLE_AREA]
variable_calculated = False
gcode =
{% if not calculated %}
{% set bed_margin_x = printer["gcode_macro RatOS"].bed_margin_x %}
{% set bed_margin_y = printer["gcode_macro RatOS"].bed_margin_y %}
{% set tool = 0 if printer["gcode_macro T0"] is not defined or printer["gcode_macro T0"].active else 1 %}
{% set max_x = printer.toolhead.axis_maximum.x if printer["dual_carriage"] is defined and tool == 0 else printer.toolhead.axis_maximum.x - bed_margin_x[1] %}
{% if printer["dual_carriage"] is defined %}
{% set max_x = printer.toolhead.axis_maximum.x %}
{% endif %}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="printer.toolhead.axis_maximum.x {printer.toolhead.axis_maximum.x}"
{% set max_y = printer.toolhead.axis_maximum.y - bed_margin_y[1]%}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_x_max VALUE={max_x}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_y_max VALUE={max_y}
SET_GCODE_VARIABLE MACRO=CALCULATE_PRINTABLE_AREA VARIABLE=calculated VALUE=True
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
RATOS_LOG PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
{% endif %}
[gcode_macro CACHE_TOOLHEAD_SETTINGS]
variable_cache = {"global": {"accel": 1000, "ratio": 0.5, "speed": 50, "scv": 5}}
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set dummy = cache.__setitem__(key, {"accel": printer.toolhead.max_accel, "ratio": printer.toolhead.minimum_cruise_ratio, "speed": printer.toolhead.max_velocity, "scv": printer.toolhead.square_corner_velocity}) %}
SET_GCODE_VARIABLE MACRO=CACHE_TOOLHEAD_SETTINGS VARIABLE=cache VALUE="{cache | pprint | replace("\n", "") | replace("\"", "\\\"")}"
DEBUG_ECHO PREFIX="CACHE_TOOLHEAD_SETTINGS" MSG="Toolhead settings cached for {key}. {printer.toolhead.max_accel} accel, {printer.toolhead.minimum_cruise_ratio} ratio, {printer.toolhead.max_velocity} velocity, {printer.toolhead.square_corner_velocity} scv."
[gcode_macro RESTORE_TOOLHEAD_SETTINGS]
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set values = printer["gcode_macro CACHE_TOOLHEAD_SETTINGS"].cache.__getitem__(key) %}
{% if values is not defined or values == 'None' %}
{ action_raise_error("RESTORE_TOOLHEAD_SETTINGS: Toolhead settings not cached for key '" ~ key ~ "'.") }
{% endif %}
SET_VELOCITY_LIMIT ACCEL={values.accel} MINIMUM_CRUISE_RATIO={values.ratio} VELOCITY={values.speed} SQUARE_CORNER_VELOCITY={values.scv}
DEBUG_ECHO PREFIX="RESTORE_TOOLHEAD_SETTINGS" MSG="Toolhead settings restored. {values.accel} accel, {values.ratio} ratio, {values.speed} velocity, {values.scv} scv."
[gcode_macro SET_MACRO_TRAVEL_SETTINGS]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float %}
{% set accel = printer["gcode_macro RatOS"].macro_travel_accel %}
SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0.5 VELOCITY={speed} SQUARE_CORNER_VELOCITY={5}
DEBUG_ECHO PREFIX="SET_MACRO_TRAVEL_SETTINGS" MSG="Macro travel settings set. {accel} accel, {speed} velocity"
[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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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
{% if printer["dual_carriage"] is not defined %}
SET_KINEMATIC_POSITION X={printable_x_max / 2} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
{% else %}
IDEX_SET_CENTER_KINEMATIC_POSITION
{% endif %}
[gcode_macro IDEX_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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set center_x = printable_x_max / 2 %}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x - (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x + (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
[gcode_macro VERIFY_HYBRID_INVERTED]
gcode =
{% set inverted = False %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy is defined and printer.fastconfig.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy.inverted|lower == 'true' %}
{% set inverted = True %}
{% endif %}
{% endif %}
{% if inverted == False %}
{ action_emergency_stop("ratos_hybrid_corexy NOT INVERTED! Inverted hybrid core-xy bugfix not detected.") }
{% endif %}
[gcode_macro RATOS_ECHO]
gcode =
{% set prefix = "RatOS" %}
{% set debug = params.DEBUG|default(0)|int %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " | " ~ params.PREFIX %}
{% endif %}
{% set prefix = prefix ~ ":" %}
{% set msg = "" %}
{% if params.MSG is defined %}
{% set msg = params.MSG %}
{% else %}
{% set msg = "No msg parameter provided (this is a bug or unintended use)." %}
{% endif %}
{% if not debug %}
M117 {prefix} {msg}
{% endif %}
RATOS_LOG PREFIX="{prefix}" MSG="{msg}"
{% if not debug %}
RESPOND PREFIX="{prefix}" MSG="{msg}"
{% else %}
CONSOLE_ECHO TITLE="{prefix}" TYPE="debug" MSG="{msg}"
{% endif %}
[gcode_macro ENABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=True
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=prefix_filter VALUE="'{params.FILTER|default('')|lower}'"
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging enabled."
[gcode_macro DISABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=False
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging disabled."
[gcode_macro DEBUG_ECHO]
variable_enabled = False
variable_prefix_filter = ''
gcode =
{% set prefix = "DEBUG" %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " - " ~ params.PREFIX %}
{% endif %}
{% if enabled and (prefix_filter|lower == '' or prefix_filter|lower in params.PREFIX|lower) %}
RATOS_ECHO PREFIX="{prefix}" MSG="{params.MSG}" DEBUG=1
{% endif %}
[gcode_macro START_FEATURE]
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="Start {params.FEATURE} feature gcode"
{% set scv = printer.toolhead.square_corner_velocity|int|default(5) %}
{% set accel = printer.toolhead.max_accel|int|default(10000) %}
{% set ratio = printer.toolhead.minimum_cruise_ratio|float|default(0.5) %}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="scv" VALUE={scv}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="accel" VALUE={accel}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="ratio" VALUE={ratio}
_USER_START_FEATURE FEATURE="{params.FEATURE}"
[gcode_macro END_FEATURE]
variable_scv = 5
variable_accel = 10000
variable_ratio = 0.5
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="End {params.FEATURE} feature gcode"
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={scv} ACCEL={accel} MINIMUM_CRUISE_RATIO={ratio}
_USER_END_FEATURE FEATURE="{params.FEATURE}" SCV={scv} ACCEL={accel} RATIO={ratio}
[gcode_macro _ON_LAYER_CHANGE]
variable_layer_number = 0
description = INTERNAL USE ONLY. Call it from the slicers after layer change custom gcode
gcode =
{% set layer = params.LAYER|int %}
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE={layer}
SET_PRINT_STATS_INFO CURRENT_LAYER={layer}
[gcode_macro _LEARN_MORE_CALIBRATION]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/calibration" %}
{% set link_text = "RatOS Calibration Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_CHAMBER_FILTER]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter Control" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_FILAMENT]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/filaments" %}
{% set link_text = "RatOS Filament Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _CONSOLE_SAVE_CONFIG]
gcode =
M118 Click SAVE_CONFIG to save the settings to your printer.cfg.
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.fastconfig.config["skew_correction %s" % ratos_skew_profile] is defined %}
SKEW_PROFILE LOAD={ratos_skew_profile}
GET_CURRENT_SKEW
{% else %}
{% set line_1 = '"Could not find skew profile %s!_N_Clearing skew correction."' % ratos_skew_profile %}
CONSOLE_ECHO TITLE="Missing skew profile!" TYPE="warning" MSG={line_1}
SET_SKEW CLEAR=1
{% endif %}
{% endif %}
[gcode_macro M601]
gcode =
PAUSE
[gcode_macro _STOP_AND_RAISE_ERROR]
gcode =
M84
_RAISE_ERROR MSG="{params.MSG}"
[gcode_macro PAUSE]
description = Pauses the print
rename_existing = PAUSE_BASE
variable_extrude = 1.5
variable_retract = 1.5
variable_fan_speed = 0
variable_idex_mode = ""
variable_idex_toolhead = 0
variable_idex_toolhead_x = 0.0
variable_idex_toolhead_y = 0.0
variable_idex_toolhead_z = 0.0
gcode =
RATOS_ECHO MSG="Pausing print..."
{% set runout_detected = true if params.RUNOUT|default(false)|lower == 'true' else false %}
_LED_PAUSE
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
SAVE_GCODE_STATE NAME=PAUSE_state
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_mode VALUE='"{idex_mode}"'
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead VALUE={idex_toolhead}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_x VALUE={printer.gcode_move.gcode_position.x|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_y VALUE={printer.gcode_move.gcode_position.y|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_z VALUE={printer.gcode_move.gcode_position.z|float}
DEBUG_ECHO PREFIX="PAUSE" MSG="idex_mode: {idex_mode}, idex_toolhead: {idex_toolhead}, idex_toolhead_x: {idex_toolhead_x}, idex_toolhead_y: {idex_toolhead_y}, idex_toolhead_z: {idex_toolhead_z}"
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
CACHE_TOOLHEAD_SETTINGS KEY="pause"
SET_MACRO_TRAVEL_SETTINGS
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% if current_z < (max_z - 20.0) %}
{% set z_safe = 20.0 %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
PAUSE_BASE
{% if printer["dual_carriage"] is not defined %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan"].speed|float}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
{% if idex_toolhead == 0 %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t1"].speed|float}
{% endif %}
{% endif %}
{% endif %}
M106 S0
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set R = printer["gcode_macro PAUSE"].retract|float %}
{% if can_extrude %}
G91
G1 E-{R} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].pause_print_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].pause_print_park_in %}
{% if runout_detected %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].runout_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].runout_park_in %}
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
DEBUG_ECHO PREFIX="PAUSE" MSG="z_speed: {z_speed}, pause_print_park_x: {pause_print_park_x}, pause_print_park_in: {pause_print_park_in}, default_toolhead: {default_toolhead}"
{% if "xyz" in printer.toolhead.homed_axes %}
G91
G1 Z{z_safe} F{z_speed}
G90
{% if printer["dual_carriage"] is not defined %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% else %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
_IDEX_SINGLE X={parking_position}
{% else %}
PARK_TOOLHEAD
{% endif %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% endif %}
{% else %}
{action_respond_info("Printer not homed")}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="pause"
RATOS_ECHO MSG="Print paused"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
RATOS_ECHO MSG="Resuming print..."
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set target_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set target_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if target_idex_mode != '' %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set fan_speed = printer["gcode_macro PAUSE"].fan_speed|float %}
{% if printer["dual_carriage"] is not defined %}
M106 S{(fan_speed * 255)}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% else %}
{% if params.TOOLHEAD is defined %}
{% if params.TOOLHEAD == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% else %}
{% if printer["gcode_macro PAUSE"].idex_toolhead == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% endif %}
{% endif %}
M106.1 S{fan_speed}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY DANCE=0
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR DANCE=0
{% else %}
{% if params.TOOLHEAD is defined %}
_SELECT_TOOL T={params.TOOLHEAD} X=-1 Y=-1 TOOLSHIFT=false
{% else %}
_SELECT_TOOL T={printer["gcode_macro PAUSE"].idex_toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% endif %}
{% set x = printer["gcode_macro PAUSE"].idex_toolhead_x|float %}
{% set y = printer["gcode_macro PAUSE"].idex_toolhead_y|float %}
{% set z = printer["gcode_macro PAUSE"].idex_toolhead_z|float %}
G1 X{x} Y{y} Z{z} F{speed}
{% if params.TOOLHEAD is defined %}
SAVE_GCODE_STATE NAME=PAUSE_STATE
{% endif %}
{% endif %}
{% if params.TOOLHEAD is not defined %}
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
{% if can_extrude %}
G91
G1 E{E} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 MOVE_SPEED={speed}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
RESUME_BASE
_LED_PRINTING
RATOS_ECHO MSG="Print resumed"
[gcode_macro CANCEL_PRINT]
description = Cancels the print
rename_existing = CANCEL_PRINT_BASE
gcode =
RATOS_ECHO MSG="Cancelling print..."
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
RATOS_ECHO MSG="Print cancelled"
[gcode_macro START_PRINT]
description = Start print procedure, use this in your Slicer.
variable_post_processor_version = 2
variable_is_printing_gcode = False
variable_both_toolheads = True
variable_object_xoffset = 0
variable_first_x = -1
variable_first_y = -1
variable_total_toolshifts = 0
variable_initial_tool = 0
variable_extruder_first_layer_temp = ""
variable_extruder_other_layer_temp = ""
gcode =
{% if params.EXTRUDER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_TEMP parameter not found.")}
{% endif %}
{% if params.EXTRUDER_OTHER_LAYER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_OTHER_LAYER_TEMP parameter not found.")}
{% endif %}
{% if params.BED_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. BED_TEMP parameter not found.")}
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' and printer["gcode_macro RatOS"].danger_force_allow_auto_center_subject|default(false)|lower != 'true'%}
{ action_raise_error("The experimental auto_center_subject feature is not supported in this version of RatOS. Please disable it in the RatOS macro settings.") }
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes and printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% if printer["gcode_macro _VAOC"].is_started|default(true)|lower == 'true' %}
_VAOC_END
{% endif %}
{% endif %}
_LED_START_PRINTING
CACHE_TOOLHEAD_SETTINGS KEY="start_print"
_USER_START_PRINT { rawparams }
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_probe_stowable = printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
{% set X0 = params.X0|default(-1)|float %}
{% set X1 = params.X1|default(-1)|float %}
{% set Y0 = params.Y0|default(-1)|float %}
{% set Y1 = params.Y1|default(-1)|float %}
{% if first_x == -1 or first_y == -1 %}
{% set first_x = params.FIRST_X|default(-1)|float %}
{% set first_y = params.FIRST_Y|default(-1)|float %}
{% endif %}
{% set total_toolshifts = params.TOTAL_TOOLSHIFTS|default(0)|int %}
{% set initial_tool = params.INITIAL_TOOL|default(default_toolhead)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set bed_temp = params.BED_TEMP|default(printer.heater_bed.target, true)|float %}
{% set total_layer_count = params.TOTAL_LAYER_COUNT|default(0)|int %}
{% set extruder_first_layer_temp = (params.EXTRUDER_TEMP|default("")).split(",") %}
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL BEACON_CONTACT_START_PRINT_TRUE_ZERO={beacon_contact_start_print_true_zero} BEACON_CONTACT_CALIBRATE_MODEL_ON_TRUE_ZERO={beacon_contact_calibrate_model_on_true_zero}
{% endif %}
_START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH BED_TEMP={bed_temp}
RATOS_ECHO MSG="First print coordinates X:{first_x} Y:{first_y}"
{% if params.TOTAL_LAYER_COUNT is not defined %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Configuration" %}
{% set line_1 = '"Your slicer gcode settings are not up to date._N_Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Incomplete Slicer Configuration detected" TYPE="warning" MSG={line_1}
{% endif %}
SET_PRINT_STATS_INFO CURRENT_LAYER=1
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE=1
{% if total_layer_count > 0 %}
SET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set swap_toolheads = true if printer["gcode_macro _IDEX_REMAP_TOOLHEADS"].enabled|default(false)|lower == 'true' else false %}
{% if swap_toolheads %}
{% set initial_tool = 0 if initial_tool == 1 else 1 %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=active VALUE=True
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=active VALUE=True
{% endif %}
{% set both_toolheads = true %}
{% if total_toolshifts == 0 %}
{% set both_toolheads = false %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
{% endif %}
{% if both_toolheads and (idex_mode == "copy" or idex_mode == "mirror") %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Gcode tool changes found. Copy and mirror mode do not support toolchanges.")}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set both_toolheads = true %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=initial_tool VALUE={initial_tool}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_x VALUE={first_x}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_y VALUE={first_y}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=total_toolshifts VALUE={total_toolshifts}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=both_toolheads VALUE={both_toolheads}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_first_layer_temp VALUE="'{params.EXTRUDER_TEMP}'"
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_other_layer_temp VALUE="'{params.EXTRUDER_OTHER_LAYER_TEMP}'"
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_TOOLCHANGE VARIABLE=toolshift_count VALUE=0
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set svv = printer.save_variables.variables %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
{% set stepper_x_position_min = printer.fastconfig.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.fastconfig.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.fastconfig.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.fastconfig.settings.dual_carriage.position_endstop|float %}
{% set x_parking_space = parking_position_t0 - (stepper_x_position_endstop , stepper_x_position_min)|max %}
{% set dc_parking_space = (dual_carriage_position_endstop , dual_carriage_position_max)|min - parking_position_t1 %}
{% if svv.idex_xoffset|abs >= (x_parking_space - 0.5) or svv.idex_xoffset|abs >= (dc_parking_space - 0.5) %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Toolhead x-offset is too high for the available parking space. Calibrate your X and DC endstop positions and make sure you stay below 1mm." % (copy_mode_max_width)) }
{% endif %}
{% endif %}
{% if (idex_mode == "copy" or idex_mode == "mirror") and printer.fastconfig.settings.ratos.enable_gcode_transform %}
{% if params.MIN_X is not defined or params.MAX_X is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Something went wrong! Missing important post processor start print parameter!") }
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE=0
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set boundary_box_min_x = params.MIN_X|default(0)|float %}
{% set boundary_box_max_x = params.MAX_X|default(printable_x_max)|float %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
{% set boundary_box_max_x = boundary_box_max_x + svv.idex_xoffset %}
{% else %}
{% set boundary_box_min_x = boundary_box_min_x - svv.idex_xoffset %}
{% endif %}
{% set center_x = printable_x_max / 2.0 %}
{% set safe_distance = printer.fastconfig.settings.dual_carriage.safe_distance|float %}
{% set object_width = boundary_box_max_x - boundary_box_min_x %}
{% set copy_mode_max_width = center_x %}
{% set mirror_mode_max_width = center_x - safe_distance / 2.0 %}
DEBUG_ECHO PREFIX="START_PRINT" MSG="OBJECT_WIDTH: {object_width} BOUNDARY_BOX_MIN_X: {boundary_box_min_x} BOUNDARY_BOX_MAX_X: {boundary_box_max_x} CENTER_X: {center_x} SAFE_DISTANCE: {safe_distance}"
{% if idex_mode == "copy" and object_width > copy_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for copy mode! Max supported width is %s mm" % (copy_mode_max_width)) }
{% endif %}
{% if idex_mode == "mirror" and object_width > mirror_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for mirror mode! Max supported width is %s mm" % (mirror_mode_max_width)) }
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = (printable_x_max - boundary_box_max_x - boundary_box_min_x) / 2 %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE={object_xoffset}
{% endif %}
{% endif %}
{% set has_initial_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_initial_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined and both_toolheads %}
{% set has_secondary_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_secondary_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% endif %}
_CHAMBER_FILTER_ON AT="before_print_start"
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true' %}
{% if both_toolheads %}
RATOS_ECHO MSG="Spool join is not possible if both toolheads are in use!"
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
CLEAR_PAUSE
{% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %}
G90
{% endif %}
SAVE_GCODE_STATE NAME=start_print_state
G21
G90
M82
_USER_START_PRINT_BEFORE_HOMING { rawparams }
{% if z_probe_stowable == true %}
STOWABLE_PROBE_BEGIN_BATCH
{% endif %}
MAYBE_HOME
_Z_HOP
{% if idex_mode != '' and not (printer.fastconfig.settings.beacon is defined and (beacon_contact_start_print_true_zero or beacon_adaptive_heat_soak)) %}
PARK_TOOLHEAD
{% endif %}
{% if chamber_temp > 0 %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED={printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float}
{% endif %}
{% endif %}
_CHAMBER_HEATER_ON START_CHAMBER_TEMP={start_chamber_temp} CHAMBER_TEMP={chamber_temp}
_USER_START_PRINT_HEAT_CHAMBER { rawparams } CHAMBER_TEMP={chamber_temp}
{% endif %}
_START_PRINT_BEFORE_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
RATOS_ECHO MSG="Heating bed..."
M190 S{bed_temp}
{% if printer.fastconfig.settings.beacon is defined and beacon_adaptive_heat_soak %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK LAYER_QUALITY={beacon_adaptive_heat_soak_layer_quality} MAXIMUM_FIRST_LAYER_DURATION={beacon_adaptive_heat_soak_maximum_first_layer_duration} MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={beacon_adaptive_heat_soak_max_wait}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_BED { rawparams }
_START_PRINT_AFTER_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
_USER_START_PRINT_BED_MESH { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_BED_MESH X0={X0} X1={X1} Y0={Y0} Y1={Y1} T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if z_probe_stowable == true %}
STOWABLE_PROBE_END_BATCH
{% endif %}
{% if idex_mode == '' %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[initial_tool]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[0]|float}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={extruder_first_layer_temp[1]|float}
{% endif %}
{% endif %}
_USER_START_PRINT_PARK { rawparams }
_START_PRINT_PARK
RATOS_ECHO MSG="Heating Extruder..."
{% if idex_mode == '' %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[initial_tool]|float} MAXIMUM={extruder_first_layer_temp[initial_tool]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder1" MINIMUM={extruder_first_layer_temp[1]|float} MAXIMUM={extruder_first_layer_temp[1]|float + 5}
{% endif %}
{% endif %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% if idex_mode == '' %}
_LED_PRINTING
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
_LED_PRINTING
{% else %}
{% if both_toolheads %}
_LED_PRINTING TOOLHEAD={initial_tool}
{% if toolchange_standby_temp > -1 %}
_LED_TOOLHEAD_STANDBY TOOLHEAD={0 if initial_tool == 1 else 1}
{% else %}
_LED_PRINTING TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% else %}
_LED_PRINTING TOOLHEAD={initial_tool}
_LED_DEACTIVATE_TOOLHEAD TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_EXTRUDER { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_AFTER_HEATING_EXTRUDER X0={X0} X1={X1} Y0={Y0} Y1={Y1} INITIAL_TOOLHEAD={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if idex_mode != '' %}
{% if not both_toolheads %}
{% if initial_tool != default_toolhead %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=standby VALUE=False
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=standby VALUE=False
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if toolchange_standby_temp > -1 %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if initial_tool == 1 else 'extruder1'} TARGET={toolchange_standby_temp}
SET_GCODE_VARIABLE MACRO=T{0 if initial_tool == 1 else 1} VARIABLE=standby VALUE=True
{% endif %}
{% endif %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if printer["dual_carriage"] is defined %}
_SET_IDEX_MODE_OFFSET
{% endif %}
{% if idex_mode != '' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% if idex_mode == "copy" and idex_mode != act_idex_mode %}
_IDEX_COPY DANCE=0
{% elif idex_mode == "mirror" and idex_mode != act_idex_mode %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
RATOS_ECHO MSG="Adjusting object x-offset by {(object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={object_xoffset} MOVE=0
{% endif %}
{% else %}
_SELECT_TOOL T={initial_tool} TOOLSHIFT=false
_SET_TOOLHEAD_OFFSET
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
_SET_EXTRUSION_MODE
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
SET_GCODE_VARIABLE MACRO=_SELECT_TOOL VARIABLE=last_timestamp VALUE={printer["print_stats"].print_duration}
{% endif %}
_USER_END_START_PRINT { rawparams }
G92 E0
_CHAMBER_FILTER_ON AT="after_print_start"
_ALERT_NON_ZERO_Z_OFFSET
RATOS_ECHO MSG="Printing..."
[gcode_macro _START_PRINT_BEFORE_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% set act_t = 1 if idex_mode == 'primary' else 0 %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set is_stowable_probe = true if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' else false %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Pre-heating extruder..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={min_temp}
{% else %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET={min_temp}
{% endif %}
{% else %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
{% endif %}
{% endif %}
{% if not is_stowable_probe %}
{% if printer["dual_carriage"] is defined and act_t != default_toolhead %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
{% endif %}
RATOS_ECHO MSG="Heat soaking z probe..."
_MOVE_TO_SAFE_Z_HOME
G0 Z2 F{z_speed}
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Waiting for extruder to be preheated..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
{% if default_toolhead == 0 %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_Z_HOP
{% endif %}
{% if auto_z_offset_calibration %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
PARK_TOOLHEAD
_CLEANING_MOVE TOOLHEAD={default_toolhead} AUTOMATED=True
_SELECT_TOOL T={0 if default_toolhead == 1 else 1} X={parking_position_t0 if default_toolhead == 1 else parking_position_t1} Y=0 TOOLSHIFT=false
_CLEANING_MOVE TOOLHEAD={0 if default_toolhead == 1 else 1} AUTOMATED=True
_VAOC_CALIBRATE_Z_OFFSET AUTO_Z_OFFSET=True
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=false
{% endif %}
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
{% if needs_rehoming %}
G28 Z
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% endif %}
{% endif %}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
PROBE PROBE_METHOD=contact SAMPLES=1
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% set fuzzy_radius = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_radius|default(0)|float if beacon_contact_start_print_true_zero_fuzzy_position else 0 %}
{% set contact_true_zero_temp_has_been_set = False %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
{% if printer.beacon.last_probe_result|lower == "ok" %}
{% set last_z_offset = printer.beacon.last_z_result %}
RATOS_ECHO MSG="Auto calibration nozzle wipe with probe result {last_z_offset}..."
G0 Z{(0.2 + last_z_offset)} F{z_speed}
G0 X70 F300
{% else %}
RATOS_ECHO MSG="Skipping auto calibration nozzle wipe because probing failed!"
{% endif %}
{% elif beacon_contact_wipe_before_true_zero_method == "probe_clean" %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% set contact_true_zero_temp_has_been_set = True %}
BEACON_PROBE_CLEAN X=50 Y=10
{% else %}
CONSOLE_ECHO TYPE="error" TITLE="Unknown wipe method" MSG="Unknown wipe method '{beacon_contact_wipe_before_true_zero_method}' configured, skipping wipe before beacon true zero."
{% endif %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME FUZZY_RADIUS={fuzzy_radius}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION
{% if not contact_true_zero_temp_has_been_set %}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% endif %}
RATOS_ECHO MSG="Beacon contact auto calibration..."
{% if beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
G0 Z5 F{z_speed}
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION]
gcode =
{% set pos = printer.ratos.last_move_to_safe_z_home_position %}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE={pos[0]}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE={pos[1]}
[gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set first_x = printer["gcode_macro START_PRINT"].first_x|default(-1)|float %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set center_x = printable_x_max / 2.0 %}
{% set center_y = printable_y_max / 2.0 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% if printer["dual_carriage"] is defined %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% endif %}
{% set X0 = params.X0|default(-1)|int %}
{% set X1 = params.X1|default(-1)|int %}
{% set Y0 = params.Y0|default(-1)|int %}
{% set Y1 = params.Y1|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% if idex_mode == '' %}
_PRIME
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
RATOS_ECHO PREFIX="IDEX" MSG="using combined prime offset for IDEX {idex_mode} mode"
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
{% if both_toolheads %}
{% if initial_toolhead == 0 %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T{initial_toolhead}"
_SELECT_TOOL T={initial_toolhead} TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% endif %}
{% endif %}
CACHE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
SET_MACRO_TRAVEL_SETTINGS
{% if (X0 > -1 and Y1 > -1) or (first_x > 0 and first_y > 0) %}
{% if printer["dual_carriage"] is defined %}
{% set acceleration = printer["gcode_macro RatOS"].toolchange_travel_accel %}
{% set max_accel = printer.toolhead.max_accel|float %}
{% set square_corner_velocity = printer.toolhead.square_corner_velocity|float %}
SET_VELOCITY_LIMIT ACCEL={acceleration} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY=20
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
{% set first_z = 1 %}
{% else %}
{% set first_z = 3 %}
{% endif %}
{% if idex_mode == "mirror" %}
{% if first_y >= 0 %}
G0 Y{first_y} F{speed}
{% else %}
G0 Y{Y1} F{speed}
{% endif %}
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
_MOVE_TO_LOADING_POSITION TOOLHEAD={initial_toolhead} AUTOMATED=True
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead} AUTOMATED=True
{% endif %}
{% if first_x >= 0 and first_y >= 0 %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% else %}
{% set first_x = X0 %}
{% set first_y = Y0 %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %}
{% set first_x = X0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %}
{% set first_x = X1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|float <= center_x %}
{% set first_x = X0 %}
{% else %}
{% set first_x = X1 %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %}
{% set first_y = Y0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %}
{% set first_y = Y1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float <= center_y %}
{% set first_y = Y0 %}
{% else %}
{% set first_y = Y1 %}
{% endif %}
{% endif %}
{% endif %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% endif %}
{% endif %}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
_LOAD_RATOS_SKEW_PROFILE
[gcode_macro _PRIME]
gcode =
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
PRIME_BLOB INITIAL_TOOLHEAD={params.INITIAL_TOOLHEAD} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={params.IDEX_MODE} Y1={params.Y1}
{% else %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE == "copy" %}
_IDEX_COPY DANCE=0
{% elif params.IDEX_MODE == "mirror" %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro END_PRINT]
description = End print procedure, use this in your Slicer.
gcode =
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SAVE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = printer["gcode_macro START_PRINT"].object_xoffset|default(0)|float %}
RATOS_ECHO MSG="Adjusting object x-offset by {(0-object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={(0-object_xoffset)}
{% endif %}
{% endif %}
_USER_END_PRINT_BEFORE_HEATERS_OFF { rawparams }
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_USER_END_PRINT_AFTER_HEATERS_OFF { rawparams }
_END_PRINT_AFTER_HEATERS_OFF
_USER_END_PRINT_PARK { rawparams }
_END_PRINT_PARK
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
{% if printer["dual_carriage"] is not defined and printer["gcode_macro RatOS"].end_print_motors_off|lower != 'false' %}
M84
{% endif %}
M107
BED_MESH_CLEAR
RATOS_ECHO MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
M84
{% endif %}
RESET_NAMED_OFFSET EVENT="end_print"
RESTORE_TOOLHEAD_SETTINGS KEY="start_print"
_CHAMBER_FILTER_ON AT="print_end"
_CHAMBER_FILTER_OFF
_CHAMBER_HEATER_OFF
_USER_END_PRINT_FINISHED { rawparams }
[gcode_macro _END_PRINT_BEFORE_HEATERS_OFF]
gcode =
RATOS_ECHO MSG="Cleaning up..."
[gcode_macro _END_PRINT_AFTER_HEATERS_OFF]
gcode =
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %}
{% set r = printer["gcode_macro RatOS"].end_print_retract_filament|default(4)|float %}
{% if current_z < (max_z - z_hop) %}
{% set z_safe = z_hop %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
G91
{% if can_extrude %}
G1 E-2 F3600
{% endif %}
G0 Z{z_safe} F3600
{% if can_extrude %}
G1 E-{(r-2)} F3600
{% endif %}
G90
[gcode_macro _SET_EXTRUSION_MODE]
gcode =
{% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %}
M83
{% else %}
M82
{% endif %}
[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 =
CACHE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set axis = params.AXIS|default('')|lower %}
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
{% if axis != '' %}
{% if axis == 'x' %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
{% elif axis == 'y' %}
MAYBE_HOME
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% else %}
{action_raise_error("Unknown axis specified. Expected X or Y.")}
{% endif %}
{% else %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% endif %}
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Shaper graph"
[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_macro MEASURE_COREXY_BELT_TENSION]
description = Generates resonance graph used to ensure belts are equally tensioned.
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
MAYBE_HOME
TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_belt_tension_graph
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Belt Tension Graph"
[gcode_shell_command generate_belt_tension_graph]
command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh
timeout = 90.
verbose = True
[idle_timeout]
gcode =
{% if printer.webhooks.state|lower == 'ready' %}
{% if printer.pause_resume.is_paused|lower == 'false' %}
_USER_BEFORE_IDLE_TIMEOUT
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
_USER_AFTER_IDLE_TIMEOUT
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[named_offsets]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[bed_mesh]
split_delta_z = 0.01
speed = 300
horizontal_move_z = 10
mesh_min = 20,30
mesh_max = 310,310
fade_start = 0.6
fade_end = 10.0
probe_count = 5,5
algorithm = bicubic
log_points = False
[fastconfig]
[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.103
control = pid
pid_kp = 42.817
pid_ki = 1.353
pid_kd = 338.788
[fan]
pin = !PA8
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PB4
fan_speed = 1
heater = extruder
shutdown_speed = 1
[controller_fan controller_fan]
pin = PD12
[printer]
kinematics = corexy
max_velocity = 300
max_accel = 3000
max_z_velocity = 20
max_z_accel = 350
square_corner_velocity = 5
minimum_cruise_ratio = 0.5
[gcode_macro QUAD_GANTRY_LEVEL]
rename_existing = QUAD_GANTRY_LEVEL_ORIG
gcode =
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
QUAD_GANTRY_LEVEL_ORIG
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 330
position_endstop = 330
step_pin = PF13
dir_pin = !x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PA2
position_min = 0
[stepper_y]
position_max = 350
position_endstop = 350
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
position_min = 0
[stepper_z]
position_max = 310
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
position_min = -5
homing_speed = 10
gear_ratio = 80:16
endstop_pin = probe:z_virtual_endstop
[quad_gantry_level]
gantry_corners =
-60,-10
410,420
points =
50,25
50,275
300,275
300,25
speed = 300
horizontal_move_z = 10
retries = 5
retry_tolerance = 0.0075
max_adjust = 10
[gcode_macro G32]
gcode =
SAVE_GCODE_STATE NAME=STATE_G32
G90
G28
QUAD_GANTRY_LEVEL
G28
G0 X175 Y175 Z30 F3600
RESTORE_GCODE_STATE NAME=STATE_G32
[extruder]
rotation_distance = 8
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB0
sensor_type = Generic 3950
sensor_pin = toolboard_t0:PA1
min_extrude_temp = 170
min_temp = 0
max_temp = 285
pressure_advance = 0.03
step_pin = toolboard_t0:PD3
dir_pin = !toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PB6
microsteps = 64
full_steps_per_rotation = 200
control = pid
pid_kp = 22.176
pid_ki = 2.843
pid_kd = 43.244
[firmware_retraction]
retract_speed = 40
unretract_extra_length = 0
unretract_speed = 40
retract_length = 0.5
[resonance_tester]
accel_chip_x = beacon
accel_chip_y = beacon
probe_points =
175,175,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 0.8
sense_resistor = 0.11
[stepper_z1]
step_pin = PE2
dir_pin = !z1_dir_pin
enable_pin = !PD4
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 0.8
sense_resistor = 0.11
[stepper_z2]
step_pin = PE6
dir_pin = !z2_dir_pin
enable_pin = !PE0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z3]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 0.8
sense_resistor = 0.11
[stepper_z3]
step_pin = PF9
dir_pin = !z3_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PB3
run_current = 0.707
driver_tbl = 0
driver_toff = 4
driver_hend = 6
driver_hstrt = 7
sense_resistor = 0.11
[beacon]
serial = /dev/beacon
x_offset = 0
y_offset = 22.5
mesh_main_direction = x
mesh_runs = 1
mesh_cluster_size = 0
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[beacon_user_z_offset]
[beacon_mesh]
[beacon_true_zero_correction]
[beacon_adaptive_heat_soak]
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
ENSURE_CRITICAL_RATOS_INIT
_BEACON_MESH_INIT
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_applied_offset
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=beacon_saved_runtime_offset
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_contact_expansion_multiplier is no longer used, please remove it from your config file."
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_scan_compensation_resolution is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_scan_compensation_resolution is no longer used, please remove it from your config file."
{% endif %}
[gcode_macro BEACON_RATOS_CALIBRATION]
gcode =
RATOS_ECHO MSG="Did you mean BEACON_RATOS_CALIBRATE?"
[gcode_macro BEACON_RATOS_CALIBRATE]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
BEACON_INITIAL_CALIBRATION _AUTOMATED=True
{% if beacon_contact_start_print_true_zero %}
BEACON_POKE_TEST _AUTOMATED=True
_BEACON_CHECK_POKE
{% if printer["dual_carriage"] is not defined %}
BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET _AUTOMATED=True
{% endif %}
{% endif %}
{% set already_heated = False %}
{% if beacon_contact_start_print_true_zero and beacon_scan_compensation_enable %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% set already_heated = True %}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True _AUTOMATED_ALREADY_HEATED={already_heated} BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if beacon_contact_start_print_true_zero %}
{% if printer["dual_carriage"] is not defined %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
_BEACON_ECHO_POKE
{% endif %}
RATOS_ECHO MSG="Beacon calibration finished!"
_LED_BEACON_CALIBRATION_END
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
[gcode_macro BEACON_INITIAL_CALIBRATION]
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
_Z_HOP
RATOS_ECHO MSG="Initial beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro BEACON_FINAL_CALIBRATION]
description = Runs BEACON_AUTO_CALIBRATE after heating the bed and chamber to specified temperatures. This creates a beacon model under reference conditions for future use.
This macro will skip calibration if both the beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero settings are enabled, because a new
model will be calibrated automatically at the start of each print. Use FORCE=True to override this check.
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set already_heated = true if params._AUTOMATED_ALREADY_HEATED|default(false)|lower == 'true' else false %}
{% set force = params.FORCE|default('false')|lower in ('1', 'true', 'yes') %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default('false')|lower == "true" %}
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero and not force %}
RATOS_ECHO MSG="BEACON_FINAL_CALIBRATION skipped, not needed because beacon_contact_calibrate_model_on_true_zero is enabled. Use FORCE=True to override."
{% else %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not already_heated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
{% if not already_heated %}
G0 Z2.5 F{z_hop_speed}
RATOS_ECHO MSG="Waiting for calibration temperature..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,3600]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% endif %}
_Z_HOP
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
_Z_HOP
RATOS_ECHO MSG="Final beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro BEACON_POKE_TEST]
variable_poke_result_1 = -1
variable_poke_result_2 = -1
variable_poke_result_3 = -1
variable_poke_result_4 = -1
variable_poke_result_5 = -1
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_1 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_2 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_3 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_4 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_5 VALUE=-1
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
G0 Z5 F{z_hop_speed}
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=1
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=2
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=3
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=4
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=5
_Z_HOP
RATOS_ECHO MSG="Beacon poke test finished!"
{% if not automated %}
_BEACON_ECHO_POKE
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_POKE]
gcode =
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
BEACON_POKE speed=3 top=5 bottom={poke_bottom}
BEACON_QUERY
[gcode_macro _BEACON_STORE_POKE]
gcode =
{% set i = params.I|default(1)|int %}
{% set last_z = printer.beacon.last_poke_result|default(0)|float %}
{% if printer.beacon.last_poke_result|lower != "none" %}
{% if printer.beacon.last_poke_result.error == 0 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE={"poke_result_%s" % i} VALUE={printer.beacon.last_poke_result.latency}
{% endif %}
{% endif %}
[gcode_macro _BEACON_CHECK_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% if p1 == -1 or p2 == -1 or p3 == -1 or p4 == -1 or p5 == -1 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test error!") }
{% endif %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg > 6 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test failed!") }
{% endif %}
[gcode_macro _BEACON_ECHO_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg <= 1 %}
{% set type = "success" %}
{% set note = "Extremely low noise, rarely achieved" %}
{% elif avg > 1 and avg <= 4 %}
{% set type = "info" %}
{% set note = "Excellent performance for a typical printer" %}
{% elif avg > 4 and avg <= 8 %}
{% set type = "warning" %}
{% set note = "Acceptable performance, machine may have considerable cyclic axis noise" %}
{% elif avg > 8 and avg <= 11 %}
{% set type = "alert" %}
{% set note = "Not ideal, may want to verify proper mounting or use thinner stackups" %}
{% elif avg > 11 %}
{% set type = "alert" %}
{% set note = "Reason for concern, present setup may be risky to continue with" %}
{% endif %}
CONSOLE_ECHO TITLE="Beacon poke test result:" TYPE={type} MSG={'"Average latency: %.2f_N_%s"' % (avg, note)}
[gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET]
variable_reference_z = 0.0
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Nozzle temperature offset calibration..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET=0
{% if not automated %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set svv = printer.save_variables.variables %}
RATOS_ECHO PREFIX="BEACON" MSG="Waiting for nozzle to reach {temp}°C..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={temp} MAXIMUM={temp + 2}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
RATOS_ECHO PREFIX="BEACON" MSG="Probing with nozzle temperature {temp}°C..."
PROBE PROBE_METHOD=contact PROBE_SPEED=3 LIFT_SPEED=15 SAMPLES=5 SAMPLE_RETRACT_DIST=3 SAMPLES_TOLERANCE=0.005 SAMPLES_TOLERANCE_RETRIES=10 SAMPLES_RESULT=median
BEACON_QUERY
G0 Z5 F{z_speed}
[gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% set last_z = printer.beacon.last_z_result|default(0)|float %}
{% if temp == 150 %}
SET_GCODE_VARIABLE MACRO=BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET"].reference_z|default(0)|float %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_t{default_toolhead} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS]
gcode =
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
CONSOLE_ECHO TYPE="info" MSG={'"T0 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t0}
{% else %}
CONSOLE_ECHO TYPE="info" MSG={'"T1 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t1}
{% endif %}
[gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET]
description = "Set the thermal expansion z offset for the active toolhead based on the current extruder target temperature and thermal expansion coefficient."
gcode =
{% if params.RESET is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The RESET parameter is no longer supported and has no effect."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% if params.TOOLHEAD is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The TOOLHEAD parameter is no longer supported and has no effect. The macro now automatically determines the current toolhead."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% set beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_expansion_compensation %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set toolhead = default_toolhead %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if current_idex_mode=='primary' else default_toolhead %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_t0 = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if printer["dual_carriage"] is defined %}
{% set nozzle_expansion_coefficient_t1 = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_delta = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = temp_delta * (expansion_coefficient / 100) %}
SET_NAMED_OFFSET NAME=hotend_thermal_expansion Z={expansion_offset} MOVE=1 MOVE_SPEED={z_speed}
RATOS_ECHO PREFIX="BEACON" MSG={'"Nozzle expansion offset of %.6fmm applied to T%s"' % (expansion_offset, toolhead)}
DEBUG_ECHO PREFIX="_BEACON_SET_NOZZLE_TEMP_OFFSET" MSG="toolhead: {toolhead}, coefficient: {expansion_coefficient|round(6)}, temp_delta: {temp_delta|round(1)}, expansion_offset: {expansion_offset|round(6)}"
{% endif %}
[gcode_macro BEACON_MEASURE_BEACON_OFFSET]
variable_needs_compensation = False
variable_reference_z = 0.0
variable_front = 0.0
variable_front_left = 0.0
variable_front_right = 0.0
variable_back = 0.0
variable_back_left = 0.0
variable_back_right = 0.0
variable_right = 0.0
variable_left = 0.0
variable_margin_x = 40
variable_margin_y = 40
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure beacon offset..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_BEACON_OFFSET
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_STORE_BEACON_OFFSET]
gcode =
{% set location = params.LOCATION|lower %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_BEACON_OFFSET]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].left|default(0)|float * 1000 %}
{% set line_1 = "Front left: %.6fμm" % (front_left) %}
{% set line_2 = "Front center: %.6fμm" % (front) %}
{% set line_3 = "Front right: %.6fμm" % (front_right) %}
{% set line_4 = "Left center: %.6fμm" % (left) %}
{% set line_5 = "Right center: %.6fμm" % (right) %}
{% set line_6 = "Back left: %.6fμm" % (back_left) %}
{% set line_7 = "Back center: %.6fμm" % (back) %}
{% set line_8 = "Back right: %.6fμm" % (back_right) %}
{% set max_value = [(front_left|abs), (front|abs), (front_right|abs), (left|abs), (right|abs), (back_left|abs), (back|abs), (back_right|abs)]|max %}
{% if max_value <= 50 %}
{% set type = "success" %}
{% set recommendation = "Very low beacon offset: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low beacon offset: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High beacon offset: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High beacon offset: %.6fμm._N_You will encounter first layer problems on large prints unless you activate beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high beacon offset: %.6fμm._N_You have significant scan/contact inconsistency which is indicative of mechanical problems, please investigate before resorting to software compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Beacon offset relative to the center" TYPE={type} MSG={'"_N_%s_N__N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s"' % (recommendation, line_1, line_2, line_3, line_4, line_5, line_6, line_7, line_8)}
[gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set profile = params.PROFILE|default("auto")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set keep_temp_meshes = params.KEEP_TEMP_MESHES|default(0) %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' %}
{% set desired_spacing = printer["gcode_macro RatOS"].beacon_scan_compensation_desired_spacing|float %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
RATOS_ECHO MSG="Please wait..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,9000]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if not (beacon_adaptive_heat_soak or bed_heat_soak_time > 0) %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if printer.z_tilt is defined %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% endif %}
{% if printer.quad_gantry_level is defined %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% endif %}
_BEACON_CREATE_SCAN_COMPENSATION_MESH_CORE PROFILE="{profile}" DESIRED_SPACING={desired_spacing} CHAMBER_TEMP={chamber_temp} KEEP_TEMP_MESHES={keep_temp_meshes}
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if automated %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
RATOS_ECHO MSG="Beacon scan compensation mesh created!"
{% if not automated %}
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
{% endif %}
{% endif %}
[gcode_macro _BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED" MSG="beacon_scan_compensation_profile {beacon_scan_compensation_profile}, beacon_scan_compensation_enable {beacon_scan_compensation_enable}"
{% if beacon_scan_compensation_enable %}
BEACON_APPLY_SCAN_COMPENSATION PROFILE="{beacon_scan_compensation_profile}"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL]
gcode =
{% set beacon_contact_start_print_true_zero = params.BEACON_CONTACT_START_PRINT_TRUE_ZERO|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = params.beacon_contact_calibrate_model_on_true_zero|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and not printer.beacon.model %}
{% set beacon_model_required_for_true_zero = beacon_contact_start_print_true_zero and not beacon_contact_calibrate_model_on_true_zero %}
{% set beacon_model_required_for_homing =
printer.fastconfig.settings.stepper_z.endstop_pin == 'probe:z_virtual_endstop'
and (( printer.fastconfig.settings.beacon.home_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower != 'true')
or ( printer.fastconfig.settings.beacon.default_probe_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower != 'true' )) %}
{% if beacon_model_required_for_homing or beacon_model_required_for_true_zero %}
_LED_START_PRINTING_ERROR
{ action_raise_error("An active Beacon model is required. Have you performed initial Beacon calibration?") }
{% endif %}
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set bed_temp_mismatch_is_error = true if printer["gcode_macro RatOS"].beacon_scan_compensation_bed_temp_mismatch_is_error|default(false)|lower == 'true' else false %}
{% set bed_temp = params.BED_TEMP|default(0)|float %}
{% if bed_temp == 0 %}
{% set bed_temp = printer.heater_bed.temperature %}
{% endif %}
DEBUG_ECHO PREFIX="_START_PRINT_PREFLIGHT_CHECK_BEACON" MSG="beacon_scan_compensation_profile={beacon_scan_compensation_profile}, beacon_scan_compensation_enable={beacon_scan_compensation_enable}, bed_temp={bed_temp}"
{% if beacon_scan_compensation_enable %}
_VALIDATE_COMPENSATION_MESH_PROFILE PROFILE="{beacon_scan_compensation_profile}" TITLE="Check Beacon scan compensation profile" SUBJECT="Configured compensation profile '{beacon_scan_compensation_profile}'" COMPARE_BED_TEMP={bed_temp} COMPARE_BED_TEMP_IS_ERROR={bed_temp_mismatch_is_error}
{% endif %}
[gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set needs_scan_compensation = true if printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].needs_compensation|default(false)|lower == 'true' else false %}
{% if needs_scan_compensation %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% endif %}
[gcode_macro _BEACON_HOME_AND_ABL]
gcode =
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% if needs_rehoming %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
[gcode_macro SAVE_Z_OFFSET]
description = Deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead, or in Mainsail use the SAVE button in the Z-OFFSET section.
gcode =
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default('false')|lower == 'true' %}
{% set msg = "SAVE_Z_OFFSET is deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead,_N_or in Mainsail use the SAVE button in the Z-OFFSET section."%}
{% if not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% set msg = msg + "_N_You must then use the SAVE_CONFIG command to persist the change." %}
{% endif %}
CONSOLE_ECHO TYPE="error" MSG="{msg}"
[gcode_macro _BEACON_OFFSET_COMPARE]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE SAMPLES_DROP=1 SAMPLES=3
BEACON_QUERY
[gcode_macro T0]
variable_join = 0
variable_remap = 0
variable_alert = ""
variable_filament_name = ""
variable_filament_type = ""
variable_filament_temp = 0
variable_runout_sensor = ""
variable_active = True
variable_color = "7bff33"
variable_hotend_type = "HF"
variable_has_cht_nozzle = False
variable_cooling_position_to_nozzle_distance = 40
variable_tooolhead_sensor_to_extruder_gear_distance = 15
variable_extruder_gear_to_cooling_position_distance = 30
variable_filament_loading_nozzle_offset = -5
variable_filament_grabbing_length = 5
variable_filament_grabbing_speed = 1
variable_enable_insert_detection = True
variable_enable_runout_detection = True
variable_enable_clog_detection = True
variable_unload_after_runout = True
variable_purge_after_load = 0
variable_purge_before_unload = 0
variable_extruder_load_speed = 60
variable_filament_load_speed = 10
variable_standby = False
variable_temperature_offset = 0
variable_has_oozeguard = False
variable_has_front_arm_nozzle_wiper = False
variable_toolhead_sensor_button_only_when_sensor_enabled = False
variable_toolhead_detect_clog_only_when_sensor_enabled = True
variable_resume_after_insert = False
gcode =
{% set x = params.X|default(-1.0)|float %}
{% set y = params.Y|default(-1.0)|float %}
{% set z = params.Z|default(0.0)|float %}
{% set s = params.S|default(1)|int %}
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
_SELECT_TOOL T=0 X={x} Y={y} Z={z} TOOLSHIFT={s}
{% endif %}
[save_variables]
filename = /home/pi/printer_data/config/ratos-variables.cfg
=======================
Loaded MCU 'mcu' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c3_PA8_PC9=PA8,PC9 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_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 BUS_PINS_spi5=PF8,PF9,PF7 BUS_PINS_spi5a=PH7,PF11,PH6 BUS_PINS_spi6=PG12,PG14,PG13 CLOCK_FREQ=400000000 MCU=stm32h723xx 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)
Loaded MCU 'rpi' 119 commands (?-20240727_132503-fv-az659-741 / gcc: (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110 binutils: (GNU Binutils for Raspbian) 2.35.2)
MCU 'rpi' config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256
Configured MCU 'rpi' (1024 moves)
Loaded MCU 'toolboard_t0' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'toolboard_t0' config: ADC_MAX=4095 BUS_PINS_i2c1_PA9_PA10=PA9,PA10 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c2_PB13_PB14=PB13,PB14 BUS_PINS_i2c3_PB3_PB4=PB3,PB4 BUS_PINS_i2c3_PC0_PC1=PC0,PC1 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2_PB2_PB11_PB10=PB2,PB11,PB10 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=64000000 MCU=stm32g0b1xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PF0,PF1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
Configured MCU 'toolboard_t0' (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.12.0-402-g2817b348-dirty'
Untracked files: klippy/extras/beacon.py, klippy/extras/beacon_adaptive_heat_soak.py, klippy/extras/beacon_mesh.py, klippy/extras/beacon_true_zero_correction.py, klippy/extras/beacon_user_z_offset.py, klippy/extras/fastconfig.py, klippy/extras/gcode_shell_command.py, klippy/extras/linear_movement_vibrations.py, klippy/extras/named_offsets.py, klippy/extras/ratos.py, (+4 files)
Branch: ratos/v2.1.x
Remote: ratos-fork
Tracked URL: https://github.com/Rat-OS/klipper.git
CPU: 4 core ?
Python: '3.9.2 (default, Jan 24 2026, 09:41:14) \n[GCC 10.2.1 20210110]'
webhooks client 3933976608: {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
=============== Log rollover at Mon Feb 16 01:16:23 2026 ===============
Stats 39.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3514 bytes_read=7957 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015789 rpi: mcu_awake=0.004 mcu_task_avg=0.000024 mcu_task_stddev=0.000013 bytes_write=865 bytes_read=4793 bytes_retransmit=0 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999710 adj=49992729 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1450 bytes_read=5715 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999873 adj=63998378 Octopus_Pro_H723_V1.1: temp=27.1 EBB42_Gen2_v1.0: temp=23.9 raspberry_pi: temp=31.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=4373 bytes_retransmit=0 bytes_invalid=0 send_seq=65 receive_seq=65 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000037 adj=31999278 coil_temp=20.6 refs=0 mcu_temp=21.98 supply_voltage=2.994 sysload=2.32 cputime=8.845 memavail=3298828 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 40.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3520 bytes_read=8060 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015372 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=871 bytes_read=4822 bytes_retransmit=0 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999614 adj=49994171 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1456 bytes_read=5818 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999924 adj=63998796 Octopus_Pro_H723_V1.1: temp=27.2 EBB42_Gen2_v1.0: temp=24.1 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=4729 bytes_retransmit=0 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000026 adj=31999297 coil_temp=20.6 refs=0 mcu_temp=22.01 supply_voltage=2.994 sysload=2.22 cputime=8.869 memavail=3300448 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 41.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3526 bytes_read=8163 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015190 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=877 bytes_read=4838 bytes_retransmit=0 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999595 adj=49995032 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1462 bytes_read=5950 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999941 adj=63998840 Octopus_Pro_H723_V1.1: temp=27.0 EBB42_Gen2_v1.0: temp=23.8 raspberry_pi: temp=32.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=5085 bytes_retransmit=0 bytes_invalid=0 send_seq=67 receive_seq=67 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000015 adj=31999251 coil_temp=20.6 refs=0 mcu_temp=22.03 supply_voltage=2.994 sysload=2.22 cputime=8.885 memavail=3300448 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 42.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3532 bytes_read=8293 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015164 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=883 bytes_read=4854 bytes_retransmit=0 bytes_invalid=0 send_seq=121 receive_seq=121 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999629 adj=49995713 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1468 bytes_read=6053 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999967 adj=63998666 Octopus_Pro_H723_V1.1: temp=27.0 EBB42_Gen2_v1.0: temp=24.0 raspberry_pi: temp=31.6 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=5441 bytes_retransmit=0 bytes_invalid=0 send_seq=68 receive_seq=68 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000018 adj=31999155 coil_temp=20.6 refs=0 mcu_temp=22.05 supply_voltage=2.994 sysload=2.22 cputime=8.901 memavail=3300448 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.6 pwm=0.000
Stats 43.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3538 bytes_read=8394 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015093 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=889 bytes_read=4870 bytes_retransmit=0 bytes_invalid=0 send_seq=122 receive_seq=122 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999649 adj=49996357 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1474 bytes_read=6156 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999987 adj=63998493 Octopus_Pro_H723_V1.1: temp=27.1 EBB42_Gen2_v1.0: temp=24.2 raspberry_pi: temp=32.6 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=5797 bytes_retransmit=0 bytes_invalid=0 send_seq=69 receive_seq=69 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000020 adj=31999088 coil_temp=20.6 refs=0 mcu_temp=22.07 supply_voltage=2.994 sysload=2.22 cputime=8.917 memavail=3305568 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 44.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3544 bytes_read=8511 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015028 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=895 bytes_read=4886 bytes_retransmit=0 bytes_invalid=0 send_seq=123 receive_seq=123 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999690 adj=49996821 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1480 bytes_read=6302 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000011 adj=63998384 Octopus_Pro_H723_V1.1: temp=27.2 EBB42_Gen2_v1.0: temp=24.2 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=6153 bytes_retransmit=0 bytes_invalid=0 send_seq=70 receive_seq=70 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000019 adj=31999047 coil_temp=20.6 refs=0 mcu_temp=22.09 supply_voltage=2.994 sysload=2.22 cputime=8.934 memavail=3304828 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 45.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3550 bytes_read=8643 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015019 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=901 bytes_read=4915 bytes_retransmit=0 bytes_invalid=0 send_seq=124 receive_seq=124 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999703 adj=49997271 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1486 bytes_read=6405 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000050 adj=63998329 Octopus_Pro_H723_V1.1: temp=27.3 EBB42_Gen2_v1.0: temp=24.4 raspberry_pi: temp=32.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=6509 bytes_retransmit=0 bytes_invalid=0 send_seq=71 receive_seq=71 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000056 adj=31999010 coil_temp=20.6 refs=0 mcu_temp=22.11 supply_voltage=2.994 sysload=2.04 cputime=8.950 memavail=3304592 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 46.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3556 bytes_read=8746 bytes_retransmit=9 bytes_invalid=0 send_seq=301 receive_seq=301 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015392 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=907 bytes_read=4931 bytes_retransmit=0 bytes_invalid=0 send_seq=125 receive_seq=125 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999730 adj=49997470 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1492 bytes_read=6508 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000071 adj=63998324 Octopus_Pro_H723_V1.1: temp=27.3 EBB42_Gen2_v1.0: temp=24.3 raspberry_pi: temp=32.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=6865 bytes_retransmit=0 bytes_invalid=0 send_seq=72 receive_seq=72 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000060 adj=31999120 coil_temp=20.6 refs=0 mcu_temp=22.13 supply_voltage=2.994 sysload=2.04 cputime=8.967 memavail=3304592 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 47.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3562 bytes_read=8849 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015361 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=913 bytes_read=4947 bytes_retransmit=0 bytes_invalid=0 send_seq=126 receive_seq=126 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999745 adj=49997460 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1498 bytes_read=6640 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000080 adj=63997961 Octopus_Pro_H723_V1.1: temp=27.3 EBB42_Gen2_v1.0: temp=24.3 raspberry_pi: temp=32.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=7221 bytes_retransmit=0 bytes_invalid=0 send_seq=73 receive_seq=73 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000062 adj=31998928 coil_temp=20.6 refs=0 mcu_temp=22.15 supply_voltage=2.994 sysload=2.04 cputime=8.984 memavail=3304592 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.7 pwm=0.000
Stats 48.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3568 bytes_read=8981 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015372 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=919 bytes_read=4963 bytes_retransmit=0 bytes_invalid=0 send_seq=127 receive_seq=127 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999770 adj=49997643 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1504 bytes_read=6743 bytes_retransmit=9 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000089 adj=63997945 Octopus_Pro_H723_V1.1: temp=27.4 EBB42_Gen2_v1.0: temp=24.7 raspberry_pi: temp=32.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=7577 bytes_retransmit=0 bytes_invalid=0 send_seq=74 receive_seq=74 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000066 adj=31998927 coil_temp=20.6 refs=0 mcu_temp=22.15 supply_voltage=2.994 sysload=2.04 cputime=9.001 memavail=3305584 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 49.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3574 bytes_read=9084 bytes_retransmit=9 bytes_invalid=0 send_seq=304 receive_seq=304 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015393 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=925 bytes_read=4979 bytes_retransmit=0 bytes_invalid=0 send_seq=128 receive_seq=128 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999768 adj=49997809 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1510 bytes_read=6860 bytes_retransmit=9 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000101 adj=63997899 Octopus_Pro_H723_V1.1: temp=27.2 EBB42_Gen2_v1.0: temp=24.4 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=7933 bytes_retransmit=0 bytes_invalid=0 send_seq=75 receive_seq=75 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000064 adj=31998918 coil_temp=20.6 refs=0 mcu_temp=22.17 supply_voltage=2.994 sysload=2.04 cputime=9.017 memavail=3304340 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 50.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3580 bytes_read=9201 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015332 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=931 bytes_read=5008 bytes_retransmit=0 bytes_invalid=0 send_seq=129 receive_seq=129 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999792 adj=49997792 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1516 bytes_read=6992 bytes_retransmit=9 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000111 adj=63997874 Octopus_Pro_H723_V1.1: temp=27.4 EBB42_Gen2_v1.0: temp=24.2 raspberry_pi: temp=31.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=8289 bytes_retransmit=0 bytes_invalid=0 send_seq=76 receive_seq=76 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000068 adj=31998889 coil_temp=20.6 refs=0 mcu_temp=22.17 supply_voltage=2.994 sysload=1.88 cputime=9.034 memavail=3304340 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 51.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3586 bytes_read=9333 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015298 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=937 bytes_read=5024 bytes_retransmit=0 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999790 adj=49997985 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1522 bytes_read=7095 bytes_retransmit=9 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000130 adj=63997928 Octopus_Pro_H723_V1.1: temp=27.4 EBB42_Gen2_v1.0: temp=24.4 raspberry_pi: temp=32.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=8645 bytes_retransmit=0 bytes_invalid=0 send_seq=77 receive_seq=77 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000074 adj=31998922 coil_temp=20.6 refs=0 mcu_temp=22.20 supply_voltage=2.994 sysload=1.88 cputime=9.053 memavail=3313832 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 52.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3592 bytes_read=9436 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015290 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=943 bytes_read=5040 bytes_retransmit=0 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999801 adj=49997970 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1528 bytes_read=7198 bytes_retransmit=9 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000137 adj=63998000 Octopus_Pro_H723_V1.1: temp=27.3 EBB42_Gen2_v1.0: temp=24.3 raspberry_pi: temp=32.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=9001 bytes_retransmit=0 bytes_invalid=0 send_seq=78 receive_seq=78 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000074 adj=31998950 coil_temp=20.6 refs=0 mcu_temp=22.22 supply_voltage=2.994 sysload=1.88 cputime=9.070 memavail=3313832 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 53.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3598 bytes_read=9534 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015269 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=949 bytes_read=5056 bytes_retransmit=0 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999812 adj=49998021 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1534 bytes_read=7330 bytes_retransmit=9 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000146 adj=63997969 Octopus_Pro_H723_V1.1: temp=27.4 EBB42_Gen2_v1.0: temp=24.6 raspberry_pi: temp=32.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=9357 bytes_retransmit=0 bytes_invalid=0 send_seq=79 receive_seq=79 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000072 adj=31998930 coil_temp=20.6 refs=0 mcu_temp=22.24 supply_voltage=2.994 sysload=1.88 cputime=9.087 memavail=3312584 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 54.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3604 bytes_read=9664 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015256 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=955 bytes_read=5072 bytes_retransmit=0 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999820 adj=49998072 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1540 bytes_read=7447 bytes_retransmit=9 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000153 adj=63997972 Octopus_Pro_H723_V1.1: temp=27.5 EBB42_Gen2_v1.0: temp=24.5 raspberry_pi: temp=32.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=9713 bytes_retransmit=0 bytes_invalid=0 send_seq=80 receive_seq=80 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000072 adj=31998954 coil_temp=20.6 refs=0 mcu_temp=22.27 supply_voltage=2.994 sysload=1.88 cputime=9.104 memavail=3312584 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 55.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3610 bytes_read=9781 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015258 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=961 bytes_read=5101 bytes_retransmit=0 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999827 adj=49998092 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1546 bytes_read=7543 bytes_retransmit=9 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000162 adj=63997966 Octopus_Pro_H723_V1.1: temp=27.5 EBB42_Gen2_v1.0: temp=24.5 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=10069 bytes_retransmit=0 bytes_invalid=0 send_seq=81 receive_seq=81 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000072 adj=31998937 coil_temp=20.6 refs=0 mcu_temp=22.29 supply_voltage=2.994 sysload=1.73 cputime=9.120 memavail=3312584 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 56.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3616 bytes_read=9884 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015246 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=967 bytes_read=5117 bytes_retransmit=0 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999836 adj=49998087 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1552 bytes_read=7666 bytes_retransmit=9 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000168 adj=63997958 Octopus_Pro_H723_V1.1: temp=27.4 EBB42_Gen2_v1.0: temp=24.5 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=10425 bytes_retransmit=0 bytes_invalid=0 send_seq=82 receive_seq=82 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000081 adj=31998911 coil_temp=20.6 refs=0 mcu_temp=22.32 supply_voltage=2.994 sysload=1.73 cputime=9.137 memavail=3312588 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 57.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3622 bytes_read=10016 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015248 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=973 bytes_read=5133 bytes_retransmit=0 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999840 adj=49998120 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1558 bytes_read=7762 bytes_retransmit=9 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000176 adj=63997952 Octopus_Pro_H723_V1.1: temp=27.5 EBB42_Gen2_v1.0: temp=24.6 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=10781 bytes_retransmit=0 bytes_invalid=0 send_seq=83 receive_seq=83 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000080 adj=31998960 coil_temp=20.6 refs=0 mcu_temp=22.33 supply_voltage=2.994 sysload=1.73 cputime=9.154 memavail=3312588 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 58.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3628 bytes_read=10119 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015375 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=979 bytes_read=5149 bytes_retransmit=0 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999837 adj=49998095 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1564 bytes_read=7858 bytes_retransmit=9 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000182 adj=63997943 Octopus_Pro_H723_V1.1: temp=27.5 EBB42_Gen2_v1.0: temp=24.6 raspberry_pi: temp=32.6 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=504 bytes_read=11137 bytes_retransmit=0 bytes_invalid=0 send_seq=84 receive_seq=84 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000079 adj=31998930 coil_temp=20.6 refs=0 mcu_temp=22.35 supply_voltage=2.994 sysload=1.73 cputime=9.170 memavail=3312588 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 59.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3634 bytes_read=10222 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015384 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=985 bytes_read=5165 bytes_retransmit=0 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999841 adj=49997922 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1570 bytes_read=8002 bytes_retransmit=9 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000229 adj=63997793 Octopus_Pro_H723_V1.1: temp=27.4 EBB42_Gen2_v1.0: temp=24.8 raspberry_pi: temp=32.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=510 bytes_read=11493 bytes_retransmit=0 bytes_invalid=0 send_seq=85 receive_seq=85 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000079 adj=31998834 coil_temp=20.6 refs=0 mcu_temp=22.36 supply_voltage=2.994 sysload=1.73 cputime=9.188 memavail=3312588 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 60.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3640 bytes_read=10368 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015358 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=991 bytes_read=5194 bytes_retransmit=0 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999841 adj=49997939 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1576 bytes_read=8105 bytes_retransmit=9 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000229 adj=63998098 Octopus_Pro_H723_V1.1: temp=27.5 EBB42_Gen2_v1.0: temp=24.7 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=516 bytes_read=11849 bytes_retransmit=0 bytes_invalid=0 send_seq=86 receive_seq=86 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000081 adj=31998832 coil_temp=20.6 refs=0 mcu_temp=22.38 supply_voltage=2.994 sysload=1.59 cputime=9.205 memavail=3312588 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 61.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3646 bytes_read=10471 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015334 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=997 bytes_read=5210 bytes_retransmit=0 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999840 adj=49997964 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1582 bytes_read=8208 bytes_retransmit=9 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000229 adj=63998044 Octopus_Pro_H723_V1.1: temp=27.5 EBB42_Gen2_v1.0: temp=24.7 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=522 bytes_read=12205 bytes_retransmit=0 bytes_invalid=0 send_seq=87 receive_seq=87 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000092 adj=31998864 coil_temp=20.6 refs=0 mcu_temp=22.39 supply_voltage=2.994 sysload=1.59 cputime=9.222 memavail=3312588 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 62.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3652 bytes_read=10574 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015312 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1003 bytes_read=5226 bytes_retransmit=0 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999844 adj=49998039 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1588 bytes_read=8340 bytes_retransmit=9 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000232 adj=63998045 Octopus_Pro_H723_V1.1: temp=27.6 EBB42_Gen2_v1.0: temp=24.5 raspberry_pi: temp=33.6 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=528 bytes_read=12561 bytes_retransmit=0 bytes_invalid=0 send_seq=88 receive_seq=88 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000093 adj=31998961 coil_temp=20.6 refs=0 mcu_temp=22.41 supply_voltage=2.994 sysload=1.59 cputime=9.300 memavail=3312588 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 63.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3658 bytes_read=10706 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015302 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1009 bytes_read=5242 bytes_retransmit=0 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999876 adj=49998063 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1594 bytes_read=8443 bytes_retransmit=9 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000237 adj=63998029 Octopus_Pro_H723_V1.1: temp=27.6 EBB42_Gen2_v1.0: temp=24.5 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=534 bytes_read=12901 bytes_retransmit=0 bytes_invalid=0 send_seq=89 receive_seq=89 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000091 adj=31998956 coil_temp=20.6 refs=0 mcu_temp=22.42 supply_voltage=2.994 sysload=1.59 cputime=9.318 memavail=3312588 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 64.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3664 bytes_read=10804 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015295 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1015 bytes_read=5258 bytes_retransmit=0 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999875 adj=49998293 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1600 bytes_read=8560 bytes_retransmit=9 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000238 adj=63998017 Octopus_Pro_H723_V1.1: temp=27.6 EBB42_Gen2_v1.0: temp=24.7 raspberry_pi: temp=34.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=540 bytes_read=13257 bytes_retransmit=0 bytes_invalid=0 send_seq=90 receive_seq=90 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000093 adj=31998925 coil_temp=20.6 refs=0 mcu_temp=22.44 supply_voltage=2.994 sysload=1.59 cputime=9.335 memavail=3312604 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 65.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3670 bytes_read=10921 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015280 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1021 bytes_read=5287 bytes_retransmit=0 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999873 adj=49998154 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1606 bytes_read=8692 bytes_retransmit=9 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000239 adj=63997966 Octopus_Pro_H723_V1.1: temp=27.5 EBB42_Gen2_v1.0: temp=24.6 raspberry_pi: temp=33.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=546 bytes_read=13613 bytes_retransmit=0 bytes_invalid=0 send_seq=91 receive_seq=91 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000094 adj=31998895 coil_temp=20.7 refs=0 mcu_temp=22.45 supply_voltage=2.994 sysload=1.46 cputime=9.353 memavail=3312604 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 66.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3676 bytes_read=11053 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015266 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1027 bytes_read=5303 bytes_retransmit=0 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999872 adj=49998106 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1612 bytes_read=8795 bytes_retransmit=9 bytes_invalid=0 send_seq=184 receive_seq=184 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000244 adj=63997950 Octopus_Pro_H723_V1.1: temp=27.7 EBB42_Gen2_v1.0: temp=24.8 raspberry_pi: temp=34.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=552 bytes_read=13969 bytes_retransmit=0 bytes_invalid=0 send_seq=92 receive_seq=92 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000094 adj=31998909 coil_temp=20.7 refs=0 mcu_temp=22.46 supply_voltage=2.994 sysload=1.46 cputime=9.370 memavail=3312604 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 67.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3682 bytes_read=11156 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015256 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1033 bytes_read=5319 bytes_retransmit=0 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999872 adj=49998075 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1618 bytes_read=8898 bytes_retransmit=9 bytes_invalid=0 send_seq=185 receive_seq=185 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000268 adj=63997973 Octopus_Pro_H723_V1.1: temp=27.7 EBB42_Gen2_v1.0: temp=24.9 raspberry_pi: temp=34.1 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=558 bytes_read=14325 bytes_retransmit=0 bytes_invalid=0 send_seq=93 receive_seq=93 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000098 adj=31998913 coil_temp=20.7 refs=0 mcu_temp=22.47 supply_voltage=2.994 sysload=1.46 cputime=9.387 memavail=3313344 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.8 pwm=0.000
Stats 68.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3688 bytes_read=11259 bytes_retransmit=9 bytes_invalid=0 send_seq=323 receive_seq=323 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015252 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1039 bytes_read=5335 bytes_retransmit=0 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999875 adj=49998059 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1624 bytes_read=9030 bytes_retransmit=9 bytes_invalid=0 send_seq=186 receive_seq=186 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000269 adj=63998140 Octopus_Pro_H723_V1.1: temp=27.6 EBB42_Gen2_v1.0: temp=24.9 raspberry_pi: temp=33.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=564 bytes_read=14681 bytes_retransmit=0 bytes_invalid=0 send_seq=94 receive_seq=94 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000109 adj=31998935 coil_temp=20.7 refs=0 mcu_temp=22.48 supply_voltage=2.994 sysload=1.46 cputime=9.404 memavail=3313360 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 69.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3694 bytes_read=11391 bytes_retransmit=9 bytes_invalid=0 send_seq=324 receive_seq=324 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015252 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1045 bytes_read=5351 bytes_retransmit=0 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999880 adj=49998067 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1630 bytes_read=9147 bytes_retransmit=9 bytes_invalid=0 send_seq=187 receive_seq=187 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000270 adj=63998075 Octopus_Pro_H723_V1.1: temp=27.6 EBB42_Gen2_v1.0: temp=24.8 raspberry_pi: temp=32.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=570 bytes_read=15037 bytes_retransmit=0 bytes_invalid=0 send_seq=95 receive_seq=95 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000108 adj=31999022 coil_temp=20.7 refs=0 mcu_temp=22.50 supply_voltage=2.994 sysload=1.46 cputime=9.422 memavail=3313360 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 70.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3700 bytes_read=11508 bytes_retransmit=9 bytes_invalid=0 send_seq=325 receive_seq=325 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015279 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1051 bytes_read=5380 bytes_retransmit=0 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999911 adj=49998085 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1636 bytes_read=9250 bytes_retransmit=9 bytes_invalid=0 send_seq=188 receive_seq=188 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000269 adj=63998029 Octopus_Pro_H723_V1.1: temp=27.7 EBB42_Gen2_v1.0: temp=24.8 raspberry_pi: temp=34.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=576 bytes_read=15393 bytes_retransmit=0 bytes_invalid=0 send_seq=96 receive_seq=96 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000107 adj=31998974 coil_temp=20.7 refs=0 mcu_temp=22.51 supply_voltage=2.994 sysload=1.34 cputime=9.439 memavail=3313616 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 71.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3706 bytes_read=11611 bytes_retransmit=9 bytes_invalid=0 send_seq=326 receive_seq=326 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015274 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1057 bytes_read=5396 bytes_retransmit=0 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999929 adj=49998303 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1642 bytes_read=9382 bytes_retransmit=9 bytes_invalid=0 send_seq=189 receive_seq=189 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000269 adj=63997929 Octopus_Pro_H723_V1.1: temp=27.8 EBB42_Gen2_v1.0: temp=24.9 raspberry_pi: temp=34.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=582 bytes_read=15749 bytes_retransmit=0 bytes_invalid=0 send_seq=97 receive_seq=97 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000105 adj=31998926 coil_temp=20.7 refs=0 mcu_temp=22.52 supply_voltage=2.994 sysload=1.34 cputime=9.457 memavail=3313616 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 72.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3712 bytes_read=11743 bytes_retransmit=9 bytes_invalid=0 send_seq=327 receive_seq=327 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015271 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1063 bytes_read=5412 bytes_retransmit=0 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999885 adj=49998397 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1648 bytes_read=9485 bytes_retransmit=9 bytes_invalid=0 send_seq=190 receive_seq=190 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000272 adj=63997910 Octopus_Pro_H723_V1.1: temp=27.9 EBB42_Gen2_v1.0: temp=25.1 raspberry_pi: temp=34.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=588 bytes_read=16105 bytes_retransmit=0 bytes_invalid=0 send_seq=98 receive_seq=98 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000105 adj=31998902 coil_temp=20.7 refs=0 mcu_temp=22.53 supply_voltage=2.994 sysload=1.34 cputime=9.475 memavail=3315244 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 73.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3718 bytes_read=11846 bytes_retransmit=9 bytes_invalid=0 send_seq=328 receive_seq=328 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015265 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1069 bytes_read=5428 bytes_retransmit=0 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999798 adj=49997898 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1654 bytes_read=9588 bytes_retransmit=9 bytes_invalid=0 send_seq=191 receive_seq=191 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000276 adj=63997917 Octopus_Pro_H723_V1.1: temp=27.7 EBB42_Gen2_v1.0: temp=25.2 raspberry_pi: temp=34.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=594 bytes_read=16461 bytes_retransmit=0 bytes_invalid=0 send_seq=99 receive_seq=99 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000105 adj=31998898 coil_temp=20.7 refs=0 mcu_temp=22.54 supply_voltage=2.994 sysload=1.34 cputime=9.492 memavail=3315392 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 74.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3724 bytes_read=11949 bytes_retransmit=9 bytes_invalid=0 send_seq=329 receive_seq=329 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015261 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1075 bytes_read=5444 bytes_retransmit=0 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999683 adj=49997121 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1660 bytes_read=9734 bytes_retransmit=9 bytes_invalid=0 send_seq=192 receive_seq=192 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000276 adj=63997946 Octopus_Pro_H723_V1.1: temp=27.7 EBB42_Gen2_v1.0: temp=25.0 raspberry_pi: temp=34.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=600 bytes_read=16817 bytes_retransmit=0 bytes_invalid=0 send_seq=100 receive_seq=100 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000104 adj=31998904 coil_temp=20.7 refs=0 mcu_temp=22.56 supply_voltage=2.994 sysload=1.34 cputime=9.510 memavail=3314920 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 75.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3730 bytes_read=12090 bytes_retransmit=9 bytes_invalid=0 send_seq=330 receive_seq=330 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015256 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1081 bytes_read=5473 bytes_retransmit=0 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999569 adj=49996224 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1666 bytes_read=9837 bytes_retransmit=9 bytes_invalid=0 send_seq=193 receive_seq=193 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000276 adj=63997925 Octopus_Pro_H723_V1.1: temp=27.9 EBB42_Gen2_v1.0: temp=25.2 raspberry_pi: temp=34.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=606 bytes_read=17173 bytes_retransmit=0 bytes_invalid=0 send_seq=101 receive_seq=101 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000103 adj=31998891 coil_temp=20.7 refs=0 mcu_temp=22.57 supply_voltage=2.994 sysload=1.23 cputime=9.528 memavail=3314920 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 76.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3736 bytes_read=12193 bytes_retransmit=9 bytes_invalid=0 send_seq=331 receive_seq=331 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015254 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1087 bytes_read=5489 bytes_retransmit=0 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999431 adj=49995522 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1672 bytes_read=9940 bytes_retransmit=9 bytes_invalid=0 send_seq=194 receive_seq=194 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000276 adj=63997911 Octopus_Pro_H723_V1.1: temp=27.8 EBB42_Gen2_v1.0: temp=25.0 raspberry_pi: temp=34.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=612 bytes_read=17529 bytes_retransmit=0 bytes_invalid=0 send_seq=102 receive_seq=102 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000102 adj=31998885 coil_temp=20.7 refs=0 mcu_temp=22.58 supply_voltage=2.994 sysload=1.23 cputime=9.545 memavail=3314920 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 77.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3742 bytes_read=12296 bytes_retransmit=9 bytes_invalid=0 send_seq=332 receive_seq=332 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015256 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1093 bytes_read=5505 bytes_retransmit=0 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999266 adj=49994711 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1678 bytes_read=10072 bytes_retransmit=9 bytes_invalid=0 send_seq=195 receive_seq=195 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000330 adj=63997893 Octopus_Pro_H723_V1.1: temp=27.8 EBB42_Gen2_v1.0: temp=25.1 raspberry_pi: temp=33.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=618 bytes_read=17885 bytes_retransmit=0 bytes_invalid=0 send_seq=103 receive_seq=103 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000107 adj=31998872 coil_temp=20.7 refs=0 mcu_temp=22.60 supply_voltage=2.994 sysload=1.23 cputime=9.563 memavail=3314860 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 78.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3748 bytes_read=12428 bytes_retransmit=9 bytes_invalid=0 send_seq=333 receive_seq=333 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015262 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1099 bytes_read=5521 bytes_retransmit=0 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999120 adj=49993779 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1684 bytes_read=10175 bytes_retransmit=9 bytes_invalid=0 send_seq=196 receive_seq=196 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000325 adj=63998405 Octopus_Pro_H723_V1.1: temp=27.8 EBB42_Gen2_v1.0: temp=25.2 raspberry_pi: temp=35.0 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=624 bytes_read=18241 bytes_retransmit=0 bytes_invalid=0 send_seq=104 receive_seq=104 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000106 adj=31998920 coil_temp=20.7 refs=0 mcu_temp=22.60 supply_voltage=2.994 sysload=1.23 cputime=9.581 memavail=3314988 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 79.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3754 bytes_read=12531 bytes_retransmit=9 bytes_invalid=0 send_seq=334 receive_seq=334 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015264 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1105 bytes_read=5537 bytes_retransmit=0 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998942 adj=49993204 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1690 bytes_read=10292 bytes_retransmit=9 bytes_invalid=0 send_seq=197 receive_seq=197 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000321 adj=63998219 Octopus_Pro_H723_V1.1: temp=27.8 EBB42_Gen2_v1.0: temp=25.0 raspberry_pi: temp=34.1 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=630 bytes_read=18597 bytes_retransmit=0 bytes_invalid=0 send_seq=105 receive_seq=105 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000105 adj=31998901 coil_temp=20.7 refs=0 mcu_temp=22.61 supply_voltage=2.994 sysload=1.23 cputime=9.598 memavail=3314484 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 80.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3760 bytes_read=12648 bytes_retransmit=9 bytes_invalid=0 send_seq=335 receive_seq=335 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015278 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1111 bytes_read=5566 bytes_retransmit=0 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998781 adj=49992390 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1696 bytes_read=10424 bytes_retransmit=9 bytes_invalid=0 send_seq=198 receive_seq=198 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000318 adj=63998085 Octopus_Pro_H723_V1.1: temp=28.0 EBB42_Gen2_v1.0: temp=25.2 raspberry_pi: temp=35.0 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=636 bytes_read=18953 bytes_retransmit=0 bytes_invalid=0 send_seq=106 receive_seq=106 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000105 adj=31998882 coil_temp=20.7 refs=0 mcu_temp=22.61 supply_voltage=2.994 sysload=1.14 cputime=9.616 memavail=3314484 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 81.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3766 bytes_read=12780 bytes_retransmit=9 bytes_invalid=0 send_seq=336 receive_seq=336 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015304 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1117 bytes_read=5582 bytes_retransmit=0 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998622 adj=49991889 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1702 bytes_read=10527 bytes_retransmit=9 bytes_invalid=0 send_seq=199 receive_seq=199 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000315 adj=63997976 Octopus_Pro_H723_V1.1: temp=27.9 EBB42_Gen2_v1.0: temp=25.2 raspberry_pi: temp=35.0 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=642 bytes_read=19309 bytes_retransmit=0 bytes_invalid=0 send_seq=107 receive_seq=107 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000104 adj=31998880 coil_temp=20.7 refs=0 mcu_temp=22.63 supply_voltage=2.994 sysload=1.14 cputime=9.633 memavail=3314484 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 82.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3772 bytes_read=12883 bytes_retransmit=9 bytes_invalid=0 send_seq=337 receive_seq=337 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015299 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1123 bytes_read=5598 bytes_retransmit=0 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998447 adj=49991446 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1708 bytes_read=10630 bytes_retransmit=9 bytes_invalid=0 send_seq=200 receive_seq=200 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000314 adj=63997878 Octopus_Pro_H723_V1.1: temp=28.0 EBB42_Gen2_v1.0: temp=25.2 raspberry_pi: temp=33.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=648 bytes_read=19665 bytes_retransmit=0 bytes_invalid=0 send_seq=108 receive_seq=108 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000103 adj=31998849 coil_temp=20.7 refs=0 mcu_temp=22.63 supply_voltage=2.994 sysload=1.14 cputime=9.650 memavail=3314484 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.8 pwm=0.000
Stats 83.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3778 bytes_read=12986 bytes_retransmit=9 bytes_invalid=0 send_seq=338 receive_seq=338 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015323 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1129 bytes_read=5614 bytes_retransmit=0 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998295 adj=49990933 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1714 bytes_read=10762 bytes_retransmit=9 bytes_invalid=0 send_seq=201 receive_seq=201 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000312 adj=63997871 Octopus_Pro_H723_V1.1: temp=27.8 EBB42_Gen2_v1.0: temp=25.3 raspberry_pi: temp=35.5 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=654 bytes_read=20021 bytes_retransmit=0 bytes_invalid=0 send_seq=109 receive_seq=109 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000102 adj=31998855 coil_temp=20.7 refs=0 mcu_temp=22.65 supply_voltage=2.994 sysload=1.14 cputime=9.667 memavail=3313728 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 84.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3784 bytes_read=13118 bytes_retransmit=9 bytes_invalid=0 send_seq=339 receive_seq=339 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015320 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1135 bytes_read=5630 bytes_retransmit=0 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998133 adj=49990683 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1720 bytes_read=10879 bytes_retransmit=9 bytes_invalid=0 send_seq=202 receive_seq=202 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000309 adj=63997804 Octopus_Pro_H723_V1.1: temp=28.0 EBB42_Gen2_v1.0: temp=25.5 raspberry_pi: temp=36.0 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=660 bytes_read=20377 bytes_retransmit=0 bytes_invalid=0 send_seq=110 receive_seq=110 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000102 adj=31998833 coil_temp=20.7 refs=0 mcu_temp=22.66 supply_voltage=2.994 sysload=1.14 cputime=9.685 memavail=3313476 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 85.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3790 bytes_read=13233 bytes_retransmit=9 bytes_invalid=0 send_seq=340 receive_seq=340 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015318 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1141 bytes_read=5659 bytes_retransmit=0 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49997976 adj=49990372 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1726 bytes_read=10982 bytes_retransmit=9 bytes_invalid=0 send_seq=203 receive_seq=203 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000309 adj=63997797 Octopus_Pro_H723_V1.1: temp=28.0 EBB42_Gen2_v1.0: temp=25.4 raspberry_pi: temp=35.5 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=666 bytes_read=20733 bytes_retransmit=0 bytes_invalid=0 send_seq=111 receive_seq=111 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000102 adj=31998846 coil_temp=20.7 refs=0 mcu_temp=22.67 supply_voltage=2.994 sysload=1.12 cputime=9.703 memavail=3313480 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 86.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3796 bytes_read=13333 bytes_retransmit=9 bytes_invalid=0 send_seq=341 receive_seq=341 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015317 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1147 bytes_read=5675 bytes_retransmit=0 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49997822 adj=49990136 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1732 bytes_read=11114 bytes_retransmit=9 bytes_invalid=0 send_seq=204 receive_seq=204 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000308 adj=63997815 Octopus_Pro_H723_V1.1: temp=28.0 EBB42_Gen2_v1.0: temp=25.4 raspberry_pi: temp=35.5 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=672 bytes_read=21089 bytes_retransmit=0 bytes_invalid=0 send_seq=112 receive_seq=112 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000103 adj=31998854 coil_temp=20.7 refs=0 mcu_temp=22.69 supply_voltage=2.994 sysload=1.12 cputime=9.720 memavail=3313480 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 87.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3802 bytes_read=13465 bytes_retransmit=9 bytes_invalid=0 send_seq=342 receive_seq=342 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015318 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1153 bytes_read=5691 bytes_retransmit=0 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49997677 adj=49989934 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1738 bytes_read=11217 bytes_retransmit=9 bytes_invalid=0 send_seq=205 receive_seq=205 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000308 adj=63997826 Octopus_Pro_H723_V1.1: temp=28.1 EBB42_Gen2_v1.0: temp=25.4 raspberry_pi: temp=34.6 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=678 bytes_read=21445 bytes_retransmit=0 bytes_invalid=0 send_seq=113 receive_seq=113 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000104 adj=31998868 coil_temp=20.7 refs=0 mcu_temp=22.71 supply_voltage=2.994 sysload=1.12 cputime=9.737 memavail=3313480 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.8 pwm=0.000
Stats 88.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3808 bytes_read=13568 bytes_retransmit=9 bytes_invalid=0 send_seq=343 receive_seq=343 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015320 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1159 bytes_read=5707 bytes_retransmit=0 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49997540 adj=49989816 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1744 bytes_read=11320 bytes_retransmit=9 bytes_invalid=0 send_seq=206 receive_seq=206 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000309 adj=63997839 Octopus_Pro_H723_V1.1: temp=28.0 EBB42_Gen2_v1.0: temp=25.4 raspberry_pi: temp=36.0 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=684 bytes_read=21801 bytes_retransmit=0 bytes_invalid=0 send_seq=114 receive_seq=114 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000107 adj=31998886 coil_temp=20.7 refs=0 mcu_temp=22.73 supply_voltage=2.994 sysload=1.12 cputime=9.755 memavail=3313480 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 89.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3814 bytes_read=13671 bytes_retransmit=9 bytes_invalid=0 send_seq=344 receive_seq=344 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015320 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1165 bytes_read=5723 bytes_retransmit=0 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49997412 adj=49989760 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1750 bytes_read=11466 bytes_retransmit=9 bytes_invalid=0 send_seq=207 receive_seq=207 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000309 adj=63997827 Octopus_Pro_H723_V1.1: temp=28.0 EBB42_Gen2_v1.0: temp=25.2 raspberry_pi: temp=36.0 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=690 bytes_read=22157 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000108 adj=31998897 coil_temp=20.7 refs=0 mcu_temp=22.74 supply_voltage=2.994 sysload=1.12 cputime=9.773 memavail=3313480 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 90.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3820 bytes_read=13817 bytes_retransmit=9 bytes_invalid=0 send_seq=345 receive_seq=345 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015328 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1171 bytes_read=5752 bytes_retransmit=0 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49997293 adj=49989755 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1756 bytes_read=11569 bytes_retransmit=9 bytes_invalid=0 send_seq=208 receive_seq=208 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000309 adj=63997802 Octopus_Pro_H723_V1.1: temp=28.1 EBB42_Gen2_v1.0: temp=25.2 raspberry_pi: temp=35.5 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=696 bytes_read=22513 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000109 adj=31998889 coil_temp=20.7 refs=0 mcu_temp=22.76 supply_voltage=2.994 sysload=1.03 cputime=9.791 memavail=3313480 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 91.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3826 bytes_read=13920 bytes_retransmit=9 bytes_invalid=0 send_seq=346 receive_seq=346 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015336 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1177 bytes_read=5768 bytes_retransmit=0 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49997182 adj=49989832 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1762 bytes_read=11672 bytes_retransmit=9 bytes_invalid=0 send_seq=209 receive_seq=209 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000309 adj=63997808 Octopus_Pro_H723_V1.1: temp=28.2 EBB42_Gen2_v1.0: temp=25.3 raspberry_pi: temp=35.0 heater_bed: target=0 temp=19.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=702 bytes_read=22869 bytes_retransmit=0 bytes_invalid=0 send_seq=117 receive_seq=117 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000109 adj=31998897 coil_temp=20.7 refs=0 mcu_temp=22.78 supply_voltage=2.994 sysload=1.03 cputime=9.808 memavail=3313480 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 92.2: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3832 bytes_read=14023 bytes_retransmit=9 bytes_invalid=0 send_seq=347 receive_seq=347 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015337 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1183 bytes_read=5784 bytes_retransmit=0 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49997077 adj=49989921 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1768 bytes_read=11804 bytes_retransmit=9 bytes_invalid=0 send_seq=210 receive_seq=210 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000309 adj=63997800 Octopus_Pro_H723_V1.1: temp=28.0 EBB42_Gen2_v1.0: temp=25.3 raspberry_pi: temp=35.0 heater_bed: target=0 temp=19.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=708 bytes_read=23225 bytes_retransmit=0 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000109 adj=31998886 coil_temp=20.7 refs=0 mcu_temp=22.79 supply_voltage=2.994 sysload=1.03 cputime=9.825 memavail=3313480 print_time=44.169 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
ratos: beacon probing regions updated: BeaconProbingRegions(x_offset=0.0, y_offset=22.5, printable_x_max=330.0, printable_y_max=350.0, mesh_proximity_min_coil_pos=(20.0, 30.0), mesh_proximity_max_coil_pos=(310.0, 310.0), mesh_proximity_min_toolhead_pos=(20.0, 7.5), mesh_proximity_max_toolhead_pos=(310.0, 287.5), mesh_contact_min=(20.0, 30.0), mesh_contact_max=(310.0, 287.5), logical_proximity_min_coil_pos=(20.0, 20.0), logical_proximity_max_coil_pos=(310.0, 330.0), logical_proximity_min_toolhead_pos=(20.0, -2.5), logical_proximity_max_toolhead_pos=(310.0, 307.5), logical_contact_min=(10.0, -12.5), logical_contact_max=(320.0, 317.5))
TMC 'stepper_z' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_z1' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_z2' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_z3' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_z' reports GSTAT: 00000000
TMC 'stepper_z1' reports GSTAT: 00000000
TMC 'stepper_z2' reports GSTAT: 00000000
TMC 'stepper_z3' reports GSTAT: 00000000
Stats 594.3: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=9040 bytes_read=73797 bytes_retransmit=9 bytes_invalid=0 send_seq=968 receive_seq=968 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016117 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4249 bytes_read=15214 bytes_retransmit=0 bytes_invalid=0 send_seq=682 receive_seq=682 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000536 adj=49998595 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4834 bytes_read=69643 bytes_retransmit=9 bytes_invalid=0 send_seq=721 receive_seq=721 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000402 adj=63997825 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=53.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3774 bytes_read=201578 bytes_retransmit=0 bytes_invalid=0 send_seq=629 receive_seq=629 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31998890 coil_temp=21.3 refs=0 mcu_temp=24.03 supply_voltage=2.994 sysload=0.05 cputime=18.469 memavail=3316572 print_time=606.546 buffer_time=0.854 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 595.3: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=9687 bytes_read=74176 bytes_retransmit=9 bytes_invalid=0 send_seq=991 receive_seq=991 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016115 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4255 bytes_read=15243 bytes_retransmit=0 bytes_invalid=0 send_seq=683 receive_seq=683 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000539 adj=49998620 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4840 bytes_read=69753 bytes_retransmit=9 bytes_invalid=0 send_seq=722 receive_seq=722 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000401 adj=63997947 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=52.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3780 bytes_read=201934 bytes_retransmit=0 bytes_invalid=0 send_seq=630 receive_seq=630 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31998882 coil_temp=21.3 refs=0 mcu_temp=24.04 supply_voltage=2.994 sysload=0.05 cputime=18.513 memavail=3316572 print_time=606.907 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
TMC 'stepper_x' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_y' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_x' reports GSTAT: 00000000
TMC 'stepper_y' reports GSTAT: 00000000
Endstop y still triggered after retract
Endstop y still triggered after retract
Endstop y still triggered after retract
Pausing toolhead to calculate stepper_z phase offset
Stats 596.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11360 bytes_read=75606 bytes_retransmit=9 bytes_invalid=0 send_seq=1071 receive_seq=1071 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016136 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4261 bytes_read=15259 bytes_retransmit=0 bytes_invalid=0 send_seq=684 receive_seq=684 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000540 adj=49998654 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4846 bytes_read=69870 bytes_retransmit=9 bytes_invalid=0 send_seq=723 receive_seq=723 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000401 adj=63997929 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=52.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3786 bytes_read=202290 bytes_retransmit=0 bytes_invalid=0 send_seq=631 receive_seq=631 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31998878 coil_temp=21.3 refs=0 mcu_temp=24.05 supply_voltage=2.994 sysload=0.05 cputime=18.600 memavail=3309516 print_time=608.035 buffer_time=0.341 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Pausing toolhead to calculate stepper_z1 phase offset
Pausing toolhead to calculate stepper_z2 phase offset
Pausing toolhead to calculate stepper_z3 phase offset
Stats 597.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11422 bytes_read=75801 bytes_retransmit=9 bytes_invalid=0 send_seq=1076 receive_seq=1076 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016133 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4267 bytes_read=15275 bytes_retransmit=0 bytes_invalid=0 send_seq=685 receive_seq=685 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000540 adj=49998593 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4852 bytes_read=69987 bytes_retransmit=9 bytes_invalid=0 send_seq=724 receive_seq=724 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000400 adj=63997841 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=52.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3792 bytes_read=202646 bytes_retransmit=0 bytes_invalid=0 send_seq=632 receive_seq=632 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31998861 coil_temp=21.3 refs=0 mcu_temp=24.05 supply_voltage=2.994 sysload=0.05 cputime=18.631 memavail=3310280 print_time=608.035 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 598.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11428 bytes_read=75918 bytes_retransmit=9 bytes_invalid=0 send_seq=1077 receive_seq=1077 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016134 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4273 bytes_read=15291 bytes_retransmit=0 bytes_invalid=0 send_seq=686 receive_seq=686 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000540 adj=49998587 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4858 bytes_read=70105 bytes_retransmit=9 bytes_invalid=0 send_seq=725 receive_seq=725 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000402 adj=63997834 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=52.6 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3798 bytes_read=203002 bytes_retransmit=0 bytes_invalid=0 send_seq=633 receive_seq=633 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31998865 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.994 sysload=0.05 cputime=18.656 memavail=3310280 print_time=608.035 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 599.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11434 bytes_read=76036 bytes_retransmit=9 bytes_invalid=0 send_seq=1078 receive_seq=1078 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016132 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4279 bytes_read=15307 bytes_retransmit=0 bytes_invalid=0 send_seq=687 receive_seq=687 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000542 adj=49998565 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4864 bytes_read=70208 bytes_retransmit=9 bytes_invalid=0 send_seq=726 receive_seq=726 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000404 adj=63997855 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.4 raspberry_pi: temp=52.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3804 bytes_read=203358 bytes_retransmit=0 bytes_invalid=0 send_seq=634 receive_seq=634 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998868 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.05 cputime=18.681 memavail=3316016 print_time=608.035 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 600.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11440 bytes_read=76139 bytes_retransmit=9 bytes_invalid=0 send_seq=1079 receive_seq=1079 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016128 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4285 bytes_read=15336 bytes_retransmit=0 bytes_invalid=0 send_seq=688 receive_seq=688 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000542 adj=49998596 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4870 bytes_read=70325 bytes_retransmit=9 bytes_invalid=0 send_seq=727 receive_seq=727 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000403 adj=63997881 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=52.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3810 bytes_read=203714 bytes_retransmit=0 bytes_invalid=0 send_seq=635 receive_seq=635 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998882 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.05 cputime=18.706 memavail=3316016 print_time=608.035 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 601.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=11446 bytes_read=76281 bytes_retransmit=9 bytes_invalid=0 send_seq=1080 receive_seq=1080 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016128 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4291 bytes_read=15352 bytes_retransmit=0 bytes_invalid=0 send_seq=689 receive_seq=689 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000543 adj=49998584 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4876 bytes_read=70457 bytes_retransmit=9 bytes_invalid=0 send_seq=728 receive_seq=728 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000402 adj=63997861 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=52.6 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3816 bytes_read=204070 bytes_retransmit=0 bytes_invalid=0 send_seq=636 receive_seq=636 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998878 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.995 sysload=0.05 cputime=18.732 memavail=3316016 print_time=608.035 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 602.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=11452 bytes_read=76384 bytes_retransmit=9 bytes_invalid=0 send_seq=1081 receive_seq=1081 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016126 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4297 bytes_read=15368 bytes_retransmit=0 bytes_invalid=0 send_seq=690 receive_seq=690 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000543 adj=49998579 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4882 bytes_read=70560 bytes_retransmit=9 bytes_invalid=0 send_seq=729 receive_seq=729 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000401 adj=63997844 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.4 raspberry_pi: temp=52.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3822 bytes_read=204426 bytes_retransmit=0 bytes_invalid=0 send_seq=637 receive_seq=637 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000165 adj=31998884 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.995 sysload=0.05 cputime=18.757 memavail=3317644 print_time=608.035 buffer_time=0.000 print_stall=0 extruder: target=0 temp=2.9 pwm=0.000
Stats 603.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=11458 bytes_read=76487 bytes_retransmit=9 bytes_invalid=0 send_seq=1082 receive_seq=1082 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016123 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4303 bytes_read=15384 bytes_retransmit=0 bytes_invalid=0 send_seq=691 receive_seq=691 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000543 adj=49998576 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4888 bytes_read=70677 bytes_retransmit=9 bytes_invalid=0 send_seq=730 receive_seq=730 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000402 adj=63997832 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3828 bytes_read=204782 bytes_retransmit=0 bytes_invalid=0 send_seq=638 receive_seq=638 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000165 adj=31998899 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.05 cputime=18.780 memavail=3317556 print_time=608.035 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 604.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=11464 bytes_read=76619 bytes_retransmit=9 bytes_invalid=0 send_seq=1083 receive_seq=1083 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016123 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4309 bytes_read=15400 bytes_retransmit=0 bytes_invalid=0 send_seq=692 receive_seq=692 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000544 adj=49998576 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4894 bytes_read=70795 bytes_retransmit=9 bytes_invalid=0 send_seq=731 receive_seq=731 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000402 adj=63997843 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3834 bytes_read=205138 bytes_retransmit=0 bytes_invalid=0 send_seq=639 receive_seq=639 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000165 adj=31998898 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.05 cputime=18.806 memavail=3316112 print_time=608.035 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 605.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=13407 bytes_read=78391 bytes_retransmit=9 bytes_invalid=0 send_seq=1181 receive_seq=1181 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016131 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=4315 bytes_read=15429 bytes_retransmit=0 bytes_invalid=0 send_seq=693 receive_seq=693 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000544 adj=49998569 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4900 bytes_read=70898 bytes_retransmit=9 bytes_invalid=0 send_seq=732 receive_seq=732 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000403 adj=63997833 Octopus_Pro_H723_V1.1: temp=31.4 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=52.6 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3840 bytes_read=205494 bytes_retransmit=0 bytes_invalid=0 send_seq=640 receive_seq=640 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998893 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.05 cputime=18.911 memavail=3316112 print_time=617.369 buffer_time=0.665 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 606.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=15273 bytes_read=79761 bytes_retransmit=9 bytes_invalid=0 send_seq=1262 receive_seq=1262 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=41 upcoming_bytes=0 freq=400016132 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=4321 bytes_read=15445 bytes_retransmit=0 bytes_invalid=0 send_seq=694 receive_seq=694 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000544 adj=49998542 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4906 bytes_read=71029 bytes_retransmit=9 bytes_invalid=0 send_seq=733 receive_seq=733 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000402 adj=63997824 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.4 raspberry_pi: temp=52.1 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3846 bytes_read=205850 bytes_retransmit=0 bytes_invalid=0 send_seq=641 receive_seq=641 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000165 adj=31998866 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.04 cputime=19.008 memavail=3306048 print_time=618.258 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Endstop y still triggered after retract
Endstop y still triggered after retract
Endstop y still triggered after retract
Stats 607.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=15617 bytes_read=80080 bytes_retransmit=9 bytes_invalid=0 send_seq=1277 receive_seq=1277 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016152 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=4327 bytes_read=15461 bytes_retransmit=0 bytes_invalid=0 send_seq=695 receive_seq=695 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000544 adj=49998542 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4912 bytes_read=71147 bytes_retransmit=9 bytes_invalid=0 send_seq=734 receive_seq=734 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000402 adj=63997819 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=53.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3852 bytes_read=206206 bytes_retransmit=0 bytes_invalid=0 send_seq=642 receive_seq=642 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998872 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.04 cputime=19.045 memavail=3305856 print_time=618.858 buffer_time=0.154 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 608.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=15623 bytes_read=80183 bytes_retransmit=9 bytes_invalid=0 send_seq=1278 receive_seq=1278 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016155 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=4333 bytes_read=15477 bytes_retransmit=0 bytes_invalid=0 send_seq=696 receive_seq=696 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000545 adj=49998503 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4918 bytes_read=71250 bytes_retransmit=9 bytes_invalid=0 send_seq=735 receive_seq=735 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000402 adj=63997770 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.6 raspberry_pi: temp=53.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3858 bytes_read=206562 bytes_retransmit=0 bytes_invalid=0 send_seq=643 receive_seq=643 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998840 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.04 cputime=19.070 memavail=3304600 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 609.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=15629 bytes_read=80286 bytes_retransmit=9 bytes_invalid=0 send_seq=1279 receive_seq=1279 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016153 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=4339 bytes_read=15492 bytes_retransmit=0 bytes_invalid=0 send_seq=697 receive_seq=697 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000554 adj=49998506 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4924 bytes_read=71367 bytes_retransmit=9 bytes_invalid=0 send_seq=736 receive_seq=736 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000401 adj=63997769 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=51.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3864 bytes_read=206918 bytes_retransmit=0 bytes_invalid=0 send_seq=644 receive_seq=644 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31998834 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.04 cputime=19.095 memavail=3310908 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 610.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=15635 bytes_read=80418 bytes_retransmit=9 bytes_invalid=0 send_seq=1280 receive_seq=1280 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016149 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4345 bytes_read=15520 bytes_retransmit=0 bytes_invalid=0 send_seq=698 receive_seq=698 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000554 adj=49998661 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4930 bytes_read=71485 bytes_retransmit=9 bytes_invalid=0 send_seq=737 receive_seq=737 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000401 adj=63997772 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3870 bytes_read=207274 bytes_retransmit=0 bytes_invalid=0 send_seq=645 receive_seq=645 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31998842 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.04 cputime=19.119 memavail=3310796 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 611.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15641 bytes_read=80534 bytes_retransmit=9 bytes_invalid=0 send_seq=1281 receive_seq=1281 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016177 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4351 bytes_read=15535 bytes_retransmit=0 bytes_invalid=0 send_seq=699 receive_seq=699 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000554 adj=49998630 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4936 bytes_read=71602 bytes_retransmit=9 bytes_invalid=0 send_seq=738 receive_seq=738 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000402 adj=63997783 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.6 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3876 bytes_read=207630 bytes_retransmit=0 bytes_invalid=0 send_seq=646 receive_seq=646 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31998853 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.995 sysload=0.04 cputime=19.144 memavail=3310796 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.0 pwm=0.000
Stats 612.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15647 bytes_read=80635 bytes_retransmit=9 bytes_invalid=0 send_seq=1282 receive_seq=1282 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016176 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4357 bytes_read=15550 bytes_retransmit=0 bytes_invalid=0 send_seq=700 receive_seq=700 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000553 adj=49998553 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4942 bytes_read=71719 bytes_retransmit=9 bytes_invalid=0 send_seq=739 receive_seq=739 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000401 adj=63997736 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=52.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3882 bytes_read=207986 bytes_retransmit=0 bytes_invalid=0 send_seq=647 receive_seq=647 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998820 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.994 sysload=0.04 cputime=19.169 memavail=3311048 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 613.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15653 bytes_read=80767 bytes_retransmit=9 bytes_invalid=0 send_seq=1283 receive_seq=1283 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016176 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4363 bytes_read=15565 bytes_retransmit=0 bytes_invalid=0 send_seq=701 receive_seq=701 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000555 adj=49998544 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4948 bytes_read=71837 bytes_retransmit=9 bytes_invalid=0 send_seq=740 receive_seq=740 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000401 adj=63997753 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=52.6 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3888 bytes_read=208342 bytes_retransmit=0 bytes_invalid=0 send_seq=648 receive_seq=648 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000165 adj=31998843 coil_temp=21.3 refs=0 mcu_temp=24.08 supply_voltage=2.994 sysload=0.04 cputime=19.194 memavail=3310796 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 614.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15659 bytes_read=80870 bytes_retransmit=9 bytes_invalid=0 send_seq=1284 receive_seq=1284 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016172 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4369 bytes_read=15580 bytes_retransmit=0 bytes_invalid=0 send_seq=702 receive_seq=702 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000564 adj=49998566 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4954 bytes_read=71940 bytes_retransmit=9 bytes_invalid=0 send_seq=741 receive_seq=741 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000400 adj=63997759 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=52.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3894 bytes_read=208698 bytes_retransmit=0 bytes_invalid=0 send_seq=649 receive_seq=649 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000165 adj=31998866 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.994 sysload=0.04 cputime=19.220 memavail=3310048 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 615.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15665 bytes_read=80973 bytes_retransmit=9 bytes_invalid=0 send_seq=1285 receive_seq=1285 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016168 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4375 bytes_read=15609 bytes_retransmit=0 bytes_invalid=0 send_seq=703 receive_seq=703 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000570 adj=49998714 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4960 bytes_read=72072 bytes_retransmit=9 bytes_invalid=0 send_seq=742 receive_seq=742 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000399 adj=63997773 Octopus_Pro_H723_V1.1: temp=31.4 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3900 bytes_read=209054 bytes_retransmit=0 bytes_invalid=0 send_seq=650 receive_seq=650 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000165 adj=31998869 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.994 sysload=0.04 cputime=19.245 memavail=3310048 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 616.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15671 bytes_read=81119 bytes_retransmit=9 bytes_invalid=0 send_seq=1286 receive_seq=1286 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016164 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4381 bytes_read=15625 bytes_retransmit=0 bytes_invalid=0 send_seq=704 receive_seq=704 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000569 adj=49998774 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4966 bytes_read=72189 bytes_retransmit=9 bytes_invalid=0 send_seq=743 receive_seq=743 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000399 adj=63997785 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=30.6 raspberry_pi: temp=52.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3906 bytes_read=209410 bytes_retransmit=0 bytes_invalid=0 send_seq=651 receive_seq=651 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000167 adj=31998878 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.994 sysload=0.03 cputime=19.270 memavail=3309552 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 617.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15677 bytes_read=81222 bytes_retransmit=9 bytes_invalid=0 send_seq=1287 receive_seq=1287 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016165 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4387 bytes_read=15641 bytes_retransmit=0 bytes_invalid=0 send_seq=705 receive_seq=705 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000568 adj=49998697 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4972 bytes_read=72292 bytes_retransmit=9 bytes_invalid=0 send_seq=744 receive_seq=744 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000399 adj=63997795 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3912 bytes_read=209766 bytes_retransmit=0 bytes_invalid=0 send_seq=652 receive_seq=652 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000167 adj=31998919 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.03 cputime=19.295 memavail=3303060 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 618.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15683 bytes_read=81325 bytes_retransmit=9 bytes_invalid=0 send_seq=1288 receive_seq=1288 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016161 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4393 bytes_read=15657 bytes_retransmit=0 bytes_invalid=0 send_seq=706 receive_seq=706 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000569 adj=49998649 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4978 bytes_read=72424 bytes_retransmit=9 bytes_invalid=0 send_seq=745 receive_seq=745 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000398 adj=63997794 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=30.6 raspberry_pi: temp=54.0 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3918 bytes_read=210122 bytes_retransmit=0 bytes_invalid=0 send_seq=653 receive_seq=653 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000172 adj=31998905 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.03 cputime=19.320 memavail=3300312 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 619.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15689 bytes_read=81457 bytes_retransmit=9 bytes_invalid=0 send_seq=1289 receive_seq=1289 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016158 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4399 bytes_read=15673 bytes_retransmit=0 bytes_invalid=0 send_seq=707 receive_seq=707 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000572 adj=49998647 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4984 bytes_read=72527 bytes_retransmit=9 bytes_invalid=0 send_seq=746 receive_seq=746 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000398 adj=63997796 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3924 bytes_read=210478 bytes_retransmit=0 bytes_invalid=0 send_seq=654 receive_seq=654 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000171 adj=31998986 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.03 cputime=19.346 memavail=3299016 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 620.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15695 bytes_read=81560 bytes_retransmit=9 bytes_invalid=0 send_seq=1290 receive_seq=1290 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016148 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4405 bytes_read=15702 bytes_retransmit=0 bytes_invalid=0 send_seq=708 receive_seq=708 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000570 adj=49998672 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4990 bytes_read=72630 bytes_retransmit=9 bytes_invalid=0 send_seq=747 receive_seq=747 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000400 adj=63997808 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3930 bytes_read=210834 bytes_retransmit=0 bytes_invalid=0 send_seq=655 receive_seq=655 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000170 adj=31998944 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.03 cputime=19.371 memavail=3314584 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 621.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15701 bytes_read=81677 bytes_retransmit=9 bytes_invalid=0 send_seq=1291 receive_seq=1291 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016148 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4411 bytes_read=15718 bytes_retransmit=0 bytes_invalid=0 send_seq=709 receive_seq=709 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000568 adj=49998631 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4996 bytes_read=72776 bytes_retransmit=9 bytes_invalid=0 send_seq=748 receive_seq=748 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000400 adj=63997865 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3936 bytes_read=211190 bytes_retransmit=0 bytes_invalid=0 send_seq=656 receive_seq=656 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000172 adj=31998925 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.995 sysload=0.03 cputime=19.397 memavail=3314108 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 622.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15707 bytes_read=81803 bytes_retransmit=9 bytes_invalid=0 send_seq=1292 receive_seq=1292 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016142 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4417 bytes_read=15734 bytes_retransmit=0 bytes_invalid=0 send_seq=710 receive_seq=710 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000566 adj=49998588 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=5002 bytes_read=72879 bytes_retransmit=9 bytes_invalid=0 send_seq=749 receive_seq=749 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000399 adj=63997847 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3942 bytes_read=211546 bytes_retransmit=0 bytes_invalid=0 send_seq=657 receive_seq=657 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000171 adj=31998939 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.995 sysload=0.03 cputime=19.423 memavail=3314108 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 623.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15713 bytes_read=81906 bytes_retransmit=9 bytes_invalid=0 send_seq=1293 receive_seq=1293 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016139 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4423 bytes_read=15750 bytes_retransmit=0 bytes_invalid=0 send_seq=711 receive_seq=711 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000564 adj=49998550 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=5008 bytes_read=72982 bytes_retransmit=9 bytes_invalid=0 send_seq=750 receive_seq=750 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000398 adj=63997844 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=30.3 raspberry_pi: temp=53.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3948 bytes_read=211902 bytes_retransmit=0 bytes_invalid=0 send_seq=658 receive_seq=658 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000171 adj=31998921 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.995 sysload=0.03 cputime=19.448 memavail=3313796 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 624.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15719 bytes_read=82009 bytes_retransmit=9 bytes_invalid=0 send_seq=1294 receive_seq=1294 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016135 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4429 bytes_read=15766 bytes_retransmit=0 bytes_invalid=0 send_seq=712 receive_seq=712 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000563 adj=49998533 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=5014 bytes_read=73114 bytes_retransmit=9 bytes_invalid=0 send_seq=751 receive_seq=751 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000399 adj=63997833 Octopus_Pro_H723_V1.1: temp=32.1 EBB42_Gen2_v1.0: temp=30.7 raspberry_pi: temp=52.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3954 bytes_read=212258 bytes_retransmit=0 bytes_invalid=0 send_seq=659 receive_seq=659 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000170 adj=31998919 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.473 memavail=3313864 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 625.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15725 bytes_read=82141 bytes_retransmit=9 bytes_invalid=0 send_seq=1295 receive_seq=1295 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016158 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4435 bytes_read=15795 bytes_retransmit=0 bytes_invalid=0 send_seq=713 receive_seq=713 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000560 adj=49998515 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=5020 bytes_read=73217 bytes_retransmit=9 bytes_invalid=0 send_seq=752 receive_seq=752 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000398 adj=63997844 Octopus_Pro_H723_V1.1: temp=32.1 EBB42_Gen2_v1.0: temp=30.4 raspberry_pi: temp=53.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3960 bytes_read=212614 bytes_retransmit=0 bytes_invalid=0 send_seq=660 receive_seq=660 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000170 adj=31998899 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.499 memavail=3313872 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 626.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15731 bytes_read=82258 bytes_retransmit=9 bytes_invalid=0 send_seq=1296 receive_seq=1296 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016180 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4441 bytes_read=15811 bytes_retransmit=0 bytes_invalid=0 send_seq=714 receive_seq=714 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000562 adj=49998441 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5026 bytes_read=73334 bytes_retransmit=9 bytes_invalid=0 send_seq=753 receive_seq=753 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000411 adj=63997775 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.6 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3966 bytes_read=212970 bytes_retransmit=0 bytes_invalid=0 send_seq=661 receive_seq=661 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000171 adj=31998859 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.524 memavail=3313872 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 627.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15737 bytes_read=82361 bytes_retransmit=9 bytes_invalid=0 send_seq=1297 receive_seq=1297 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016175 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4447 bytes_read=15827 bytes_retransmit=0 bytes_invalid=0 send_seq=715 receive_seq=715 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000560 adj=49998452 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5032 bytes_read=73466 bytes_retransmit=9 bytes_invalid=0 send_seq=754 receive_seq=754 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000411 adj=63997924 Octopus_Pro_H723_V1.1: temp=32.1 EBB42_Gen2_v1.0: temp=30.4 raspberry_pi: temp=53.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3972 bytes_read=213310 bytes_retransmit=0 bytes_invalid=0 send_seq=662 receive_seq=662 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000170 adj=31998847 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.548 memavail=3313872 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 628.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15743 bytes_read=82493 bytes_retransmit=9 bytes_invalid=0 send_seq=1298 receive_seq=1298 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016174 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4453 bytes_read=15843 bytes_retransmit=0 bytes_invalid=0 send_seq=716 receive_seq=716 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000563 adj=49998449 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5038 bytes_read=73569 bytes_retransmit=9 bytes_invalid=0 send_seq=755 receive_seq=755 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000411 adj=63997908 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=30.7 raspberry_pi: temp=53.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3978 bytes_read=213666 bytes_retransmit=0 bytes_invalid=0 send_seq=663 receive_seq=663 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000169 adj=31998849 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.573 memavail=3313872 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 629.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15749 bytes_read=82596 bytes_retransmit=9 bytes_invalid=0 send_seq=1299 receive_seq=1299 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016172 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4459 bytes_read=15859 bytes_retransmit=0 bytes_invalid=0 send_seq=717 receive_seq=717 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000560 adj=49998518 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5044 bytes_read=73672 bytes_retransmit=9 bytes_invalid=0 send_seq=756 receive_seq=756 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000412 adj=63997896 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=30.4 raspberry_pi: temp=52.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3984 bytes_read=214022 bytes_retransmit=0 bytes_invalid=0 send_seq=664 receive_seq=664 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000168 adj=31998846 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.597 memavail=3312148 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 630.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15755 bytes_read=82699 bytes_retransmit=9 bytes_invalid=0 send_seq=1300 receive_seq=1300 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016177 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4465 bytes_read=15875 bytes_retransmit=0 bytes_invalid=0 send_seq=718 receive_seq=718 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000560 adj=49998487 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5050 bytes_read=73804 bytes_retransmit=9 bytes_invalid=0 send_seq=757 receive_seq=757 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000413 adj=63997898 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=30.4 raspberry_pi: temp=52.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3990 bytes_read=214378 bytes_retransmit=0 bytes_invalid=0 send_seq=665 receive_seq=665 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000168 adj=31998842 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.625 memavail=3312424 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 631.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15761 bytes_read=82845 bytes_retransmit=9 bytes_invalid=0 send_seq=1301 receive_seq=1301 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016171 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4471 bytes_read=15904 bytes_retransmit=0 bytes_invalid=0 send_seq=719 receive_seq=719 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000558 adj=49998486 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5056 bytes_read=73921 bytes_retransmit=9 bytes_invalid=0 send_seq=758 receive_seq=758 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000412 adj=63997879 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=30.6 raspberry_pi: temp=53.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3996 bytes_read=214734 bytes_retransmit=0 bytes_invalid=0 send_seq=666 receive_seq=666 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000167 adj=31998832 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.650 memavail=3312424 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 632.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15767 bytes_read=82948 bytes_retransmit=9 bytes_invalid=0 send_seq=1302 receive_seq=1302 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016173 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4477 bytes_read=15920 bytes_retransmit=0 bytes_invalid=0 send_seq=720 receive_seq=720 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000556 adj=49998484 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5062 bytes_read=74024 bytes_retransmit=9 bytes_invalid=0 send_seq=759 receive_seq=759 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000410 adj=63997867 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4002 bytes_read=215090 bytes_retransmit=0 bytes_invalid=0 send_seq=667 receive_seq=667 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000167 adj=31998843 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.674 memavail=3314052 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 633.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15773 bytes_read=83047 bytes_retransmit=9 bytes_invalid=0 send_seq=1303 receive_seq=1303 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016168 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4483 bytes_read=15936 bytes_retransmit=0 bytes_invalid=0 send_seq=721 receive_seq=721 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000554 adj=49998469 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5068 bytes_read=74156 bytes_retransmit=9 bytes_invalid=0 send_seq=760 receive_seq=760 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000409 adj=63997827 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=30.7 raspberry_pi: temp=53.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4008 bytes_read=215446 bytes_retransmit=0 bytes_invalid=0 send_seq=668 receive_seq=668 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000166 adj=31998852 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.700 memavail=3314736 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 634.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15779 bytes_read=83179 bytes_retransmit=9 bytes_invalid=0 send_seq=1304 receive_seq=1304 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016173 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4489 bytes_read=15952 bytes_retransmit=0 bytes_invalid=0 send_seq=722 receive_seq=722 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000555 adj=49998456 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5074 bytes_read=74259 bytes_retransmit=9 bytes_invalid=0 send_seq=761 receive_seq=761 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000409 adj=63997823 Octopus_Pro_H723_V1.1: temp=31.8 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.1 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4014 bytes_read=215802 bytes_retransmit=0 bytes_invalid=0 send_seq=669 receive_seq=669 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000166 adj=31998849 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.994 sysload=0.03 cputime=19.725 memavail=3314256 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 635.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15785 bytes_read=83282 bytes_retransmit=9 bytes_invalid=0 send_seq=1305 receive_seq=1305 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016170 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4495 bytes_read=15968 bytes_retransmit=0 bytes_invalid=0 send_seq=723 receive_seq=723 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000554 adj=49998474 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5080 bytes_read=74362 bytes_retransmit=9 bytes_invalid=0 send_seq=762 receive_seq=762 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000410 adj=63997805 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.6 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4020 bytes_read=216158 bytes_retransmit=0 bytes_invalid=0 send_seq=670 receive_seq=670 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000166 adj=31998838 coil_temp=21.3 refs=0 mcu_temp=24.09 supply_voltage=2.995 sysload=0.03 cputime=19.749 memavail=3314256 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 636.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15791 bytes_read=83399 bytes_retransmit=9 bytes_invalid=0 send_seq=1306 receive_seq=1306 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016170 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4501 bytes_read=15997 bytes_retransmit=0 bytes_invalid=0 send_seq=724 receive_seq=724 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000553 adj=49998494 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5086 bytes_read=74508 bytes_retransmit=9 bytes_invalid=0 send_seq=763 receive_seq=763 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000409 adj=63997832 Octopus_Pro_H723_V1.1: temp=31.8 EBB42_Gen2_v1.0: temp=30.2 raspberry_pi: temp=53.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4026 bytes_read=216514 bytes_retransmit=0 bytes_invalid=0 send_seq=671 receive_seq=671 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000165 adj=31998847 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.02 cputime=19.774 memavail=3314256 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 637.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15797 bytes_read=83531 bytes_retransmit=9 bytes_invalid=0 send_seq=1307 receive_seq=1307 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016196 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4507 bytes_read=16013 bytes_retransmit=0 bytes_invalid=0 send_seq=725 receive_seq=725 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000550 adj=49998481 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5092 bytes_read=74611 bytes_retransmit=9 bytes_invalid=0 send_seq=764 receive_seq=764 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000414 adj=63997819 Octopus_Pro_H723_V1.1: temp=31.8 EBB42_Gen2_v1.0: temp=30.6 raspberry_pi: temp=53.1 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4032 bytes_read=216870 bytes_retransmit=0 bytes_invalid=0 send_seq=672 receive_seq=672 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000165 adj=31998849 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.02 cputime=19.799 memavail=3314256 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 638.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15816 bytes_read=83639 bytes_retransmit=9 bytes_invalid=0 send_seq=1309 receive_seq=1309 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016191 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4513 bytes_read=16029 bytes_retransmit=0 bytes_invalid=0 send_seq=726 receive_seq=726 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000547 adj=49998397 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5098 bytes_read=74714 bytes_retransmit=9 bytes_invalid=0 send_seq=765 receive_seq=765 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000419 adj=63997826 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=30.7 raspberry_pi: temp=53.6 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4038 bytes_read=217226 bytes_retransmit=0 bytes_invalid=0 send_seq=673 receive_seq=673 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998812 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.02 cputime=19.824 memavail=3314256 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 639.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15822 bytes_read=83742 bytes_retransmit=9 bytes_invalid=0 send_seq=1310 receive_seq=1310 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016187 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4519 bytes_read=16045 bytes_retransmit=0 bytes_invalid=0 send_seq=727 receive_seq=727 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000544 adj=49998391 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5104 bytes_read=74846 bytes_retransmit=9 bytes_invalid=0 send_seq=766 receive_seq=766 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000417 adj=63997914 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=30.4 raspberry_pi: temp=53.6 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4044 bytes_read=217582 bytes_retransmit=0 bytes_invalid=0 send_seq=674 receive_seq=674 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998823 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.02 cputime=19.850 memavail=3314008 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 640.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15828 bytes_read=83874 bytes_retransmit=9 bytes_invalid=0 send_seq=1311 receive_seq=1311 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016181 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4525 bytes_read=16061 bytes_retransmit=0 bytes_invalid=0 send_seq=728 receive_seq=728 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000542 adj=49998389 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5110 bytes_read=74949 bytes_retransmit=9 bytes_invalid=0 send_seq=767 receive_seq=767 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000422 adj=63997879 Octopus_Pro_H723_V1.1: temp=31.9 EBB42_Gen2_v1.0: temp=30.5 raspberry_pi: temp=53.6 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4050 bytes_read=217938 bytes_retransmit=0 bytes_invalid=0 send_seq=675 receive_seq=675 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998841 coil_temp=21.3 refs=0 mcu_temp=24.07 supply_voltage=2.995 sysload=0.02 cputime=19.874 memavail=3314020 print_time=618.858 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
SStarting Klippy...
Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
Git version: 'v0.12.0-402-g2817b348-dirty'
Untracked files: klippy/extras/beacon.py, klippy/extras/beacon_adaptive_heat_soak.py, klippy/extras/beacon_mesh.py, klippy/extras/beacon_true_zero_correction.py, klippy/extras/beacon_user_z_offset.py, klippy/extras/fastconfig.py, klippy/extras/gcode_shell_command.py, klippy/extras/linear_movement_vibrations.py, klippy/extras/named_offsets.py, klippy/extras/ratos.py, (+4 files)
Branch: ratos/v2.1.x
Remote: ratos-fork
Tracked URL: https://github.com/Rat-OS/klipper.git
CPU: 4 core ?
Python: '3.9.2 (default, Jan 24 2026, 09:41:14) \n[GCC 10.2.1 20210110]'
Start printer at Mon Feb 16 01:24:35 2026 (1771205075.8 20.5)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-pro-h723-11]
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=PG13,
z1_step_pin=PE2,
z1_dir_pin=PE3,
z1_enable_pin=PD4,
z1_uart_pin=PE1,
z1_diag_pin=PG14,
z2_step_pin=PE6,
z2_dir_pin=PA14,
z2_enable_pin=PE0,
z2_uart_pin=PD3,
z2_diag_pin=PG15,
z3_step_pin=PF9,
z3_dir_pin=PF10,
z3_enable_pin=PG2,
z3_uart_pin=PF2,
z3_diag_pin=PG12,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
e_power_draw_pin=null,
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,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PG15,
filament_sensor_motion_pin=PG14,
ratrig_vaoc_probe_pin=PG10,
ratrig_vaoc_led_pin=PB0,
ratrig_vaoc_fan_pin=PD13,
chamber_lighting_pin=PB11,
chamber_filter_4p_fan_pin=PD14,
chamber_filter_4p_fan_enable_pin=PD15
[mcu]
serial = /dev/RatOS/btt-octopus-pro-h723-11
[temperature_sensor Octopus_Pro_H723_V1.1]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_software_mosi_pin = PB5
spi_software_miso_pin = PB4
spi_software_sclk_pin = PB3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD3,
e_dir_pin=PD2,
e_enable_pin=PB6,
e_uart_pin=PB3,
e_heater_pin=PB0,
e_sensor_pin=PA1,
e_power_draw_pin=null,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB1,
bltouch_sensor_pin=PA5,
bltouch_control_pin=PA4,
probe_pin=PA5,
fan_part_cooling_pin=PB8,
fan_toolhead_cooling_pin=PB4,
fan_controller_board_pin=null,
heater_bed_heating_pin=null,
heater_bed_sensor_pin=null,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PA3,
filament_sensor_motion_pin=PA9,
ratrig_vaoc_probe_pin=null,
ratrig_vaoc_led_pin=null,
ratrig_vaoc_fan_pin=null,
chamber_lighting_pin=null,
chamber_filter_4p_fan_pin=null,
chamber_filter_4p_fan_enable_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-gen2-10-t0
[temperature_sensor EBB42_Gen2_v1.0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[lis2dw toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB1
spi_software_mosi_pin = toolboard_t0:PB11
spi_software_miso_pin = toolboard_t0:PB2
spi_software_sclk_pin = toolboard_t0:PB10
[gcode_macro RatOS]
variable_homing = "endstops"
variable_z_probe = "static"
variable_sensorless_x_current = 0.6
variable_sensorless_y_current = 0.9
variable_safe_home_x = "middle"
variable_safe_home_y = "middle"
variable_driver_type_x = "tmc2209"
variable_driver_type_y = "tmc2209"
variable_stowable_probe_stop_on_error = False
variable_chamber_filter_enable = True
variable_chamber_filter_speed = 0.5
variable_chamber_filter_disable_speed = 1.0
variable_chamber_filter_enable_at = "after_print_start"
variable_chamber_filter_disable_period = 300
variable_chamber_filter_disable_bed_temp = 0
variable_chamber_heater_enable = True
variable_chamber_heater_bed_temp = 115
variable_chamber_heater_preheating_temp = 150
variable_chamber_heater_heating_temp_offset = 25
variable_chamber_heater_control_external_heater = False
variable_chamber_heater_air_circulation_enable = True
variable_chamber_heater_air_circulation_fan_speed = 0.35
variable_chamber_heater_air_circulation_y_pos = 0
variable_chamber_heater_air_circulation_z_pos = 100
variable_chamber_heater_extra_fan_speed = 1.0
variable_chamber_heater_filter_fan_speed = 1.0
variable_led_status_action = 0.0,1.0,1.0
variable_led_status_success = 0.0,1.0,0.0
variable_led_status_error = 1.0,0.0,1.0
variable_led_status_on = 1.0,1.0,1.0
variable_led_status_off = 0.0,0.0,1.0
variable_led_status_standby = 0.1,0.1,0.1
variable_led_status_heating = 1.0,0.0,0.0
variable_led_status_cooling = 0.0,0.0,1.0
variable_calibrate_bed_mesh = True
variable_adaptive_mesh = True
variable_start_print_park_in = "front"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "front"
variable_end_print_park_z_hop = 20
variable_nozzle_priming = "primeblob"
variable_nozzle_prime_start_x = "max"
variable_nozzle_prime_start_y = "min"
variable_nozzle_prime_direction = "auto"
variable_nozzle_prime_bridge_fan = 102
variable_probe_for_priming_result = None
variable_probe_for_priming_end_result = None
variable_probe_for_priming_result_t1 = None
variable_probe_for_priming_end_result_t1 = None
variable_probe_for_priming_disable_mesh_constraints = False
variable_adaptive_prime_offset_threshold = -1.0
variable_last_z_offset = None
variable_runout_park_in = "front"
variable_enable_unload_tip_forming = False
variable_filament_unload_length = 150
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 = True
variable_preheat_extruder_temp = 150
variable_macro_travel_speed = 300
variable_macro_travel_accel = 3000
variable_macro_z_speed = 15
variable_bed_margin_x = [0, 0]
variable_bed_margin_y = [0, 0]
variable_printable_x_min = 0
variable_printable_x_max = 0
variable_printable_y_min = 0
variable_printable_y_max = 0
variable_end_print_motors_off = True
variable_status_color_ok = "00FF00"
variable_status_color_error = "FF0000"
variable_status_color_unknown = "FFFF00"
variable_end_print_retract_filament = 10
gcode =
ECHO_RATOS_VARS
variable_beacon_bed_mesh_scv = 25
variable_beacon_contact_z_homing = False
variable_beacon_contact_start_print_true_zero = True
variable_beacon_contact_start_print_true_zero_fuzzy_position = True
variable_beacon_contact_calibrate_model_on_true_zero = True
variable_beacon_contact_wipe_before_true_zero = True
variable_beacon_contact_wipe_before_true_zero_method = "probe_clean"
variable_beacon_contact_true_zero_temp = 170
variable_beacon_contact_prime_probing = True
variable_beacon_contact_expansion_compensation = True
variable_beacon_contact_bed_mesh = False
variable_beacon_contact_bed_mesh_samples = 2
variable_beacon_contact_z_tilt_adjust = False
variable_beacon_contact_z_tilt_adjust_samples = 2
variable_beacon_scan_compensation_enable = True
variable_beacon_scan_compensation_profile = "auto"
variable_beacon_scan_compensation_desired_spacing = 10
variable_beacon_scan_compensation_bed_temp_mismatch_is_error = False
variable_beacon_contact_poke_bottom_limit = -1
variable_beacon_scan_method_automatic = False
variable_beacon_adaptive_heat_soak_max_wait = 5400
variable_beacon_adaptive_heat_soak_extra_wait_after_completion = 0
variable_beacon_adaptive_heat_soak_layer_quality = 3
variable_beacon_adaptive_heat_soak_maximum_first_layer_duration = 1800
variable_beacon_contact_start_print_true_zero_fuzzy_radius = 20
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209"]
variable_y_axes = ["y"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2", "z3"]
[ratos_homing]
axes = xyz
z_hop = 15
z_hop_speed = 15
gcode =
_LED_ON
{% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set target_idex_mode = printer["dual_carriage"].carriage_1|lower %}
_IDEX_SINGLE
_SELECT_TOOL T={default_toolhead} TOOLSHIFT=false
{% endif %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True
M400
G90
{% set X = true if params.X is defined else false %}
{% set Y = true if params.Y is defined else false %}
{% set Z = true if params.Z is defined else false %}
{% if printer["gcode_macro RatOS"].home_y_first|default(false)|lower == 'true' %}
HOME_Y X={X} Y={Y} Z={Z}
HOME_X X={X} Y={Y} Z={Z}
{% else %}
HOME_X X={X} Y={Y} Z={Z}
HOME_Y X={X} Y={Y} Z={Z}
{% endif %}
HOME_Z X={X} Y={Y} Z={Z}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR
{% endif %}
{% endif %}
[gcode_macro HOME_X]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %}
{% set homing_x = homing_x if homing_x else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_X" MSG="printable_x_max: {printable_x_max}, safe_home_x: {safe_home_x}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}"
{% if X or not Y and not Z %}
{% if homing_x == 'endstop' %}
G28 X
{% elif homing_x == 'sensorless' %}
{% if printer["dual_carriage"] is defined %}
{ action_emergency_stop("sensorless homing not supported on IDEX!") }
{% endif %}
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 %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % (0 if default_toolhead==1 else 1)].parking_position|float %}
SET_DUAL_CARRIAGE CARRIAGE={0 if default_toolhead==1 else 1} MODE=PRIMARY
G1 X{parking_position} F{speed}
SET_DUAL_CARRIAGE CARRIAGE={default_toolhead} MODE=PRIMARY
{% endif %}
{% set x_homed = True %}
G0 X{safe_home_x} F{speed}
M400
{% endif %}
[gcode_macro HOME_Y]
gcode =
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %}
{% set homing_y = homing_y if homing_y else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Y" MSG="printable_y_max: {printable_y_max}, safe_home_y: {safe_home_y}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}"
{% if Y or not X and not Z %}
{% if homing_y == 'endstop' %}
G28 Y
{% elif homing_y == '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 %}
[gcode_macro HOME_Z]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% set beacon_contact_z_homing = true if printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_z_home_position_fuzzing_radius = printer["gcode_macro RatOS"].beacon_z_home_position_fuzzing_radius|default(0)|float %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Z" MSG="x_homed: {x_homed}, y_homed: {y_homed}, z_probe: {z_probe}, beacon_contact_z_homing: {beacon_contact_z_homing}"
{% if Z or not Y and not X %}
RATOS_ECHO MSG="Homing Z"
{% if x_homed == False or y_homed == False %}
{ action_emergency_stop("X and Y must be homed before homing Z") }
{% else %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_z_homing %}
{% if beacon_contact_start_print_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro HOME_X_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
G4 P300
G28 X
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
[gcode_macro HOME_Y_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
G4 P300
G28 Y
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
[gcode_macro _Z_HOP]
description = Move Z axis up by Z_HOP distance at Z_HOP_SPEED. In relative mode it will move Z axis up by Z_HOP distance. In absolute mode it will move Z axis to Z_HOP distance.
gcode =
{% set z_hop = printer.fastconfig.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro __MOVE_TO_SAFE_Z_HOME_ECHO_DEBUG]
gcode =
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="x: {params.X}, y: {params.Y}, z_hop: {params.Z_HOP}, fuzzy_radius: {params.FUZZY_RADIUS}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}, printable_x_max: {printer['gcode_macro RatOS'].printable_x_max}, printable_y_max: {printer['gcode_macro RatOS'].printable_y_max}"
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis. Specify ABL=1 to also ensure that automatic bed levelling is applied (if configured).
variable_is_kinematic_position_overriden = False
gcode =
{% set abl = params.ABL|default('')|lower in ('true', 'yes', '1') %}
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
RATOS_ECHO 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 %}
RATOS_ECHO MSG="Homing {axesToHome}"
G28 {axesToHome}
{% else %}
RATOS_ECHO MSG="All requested axes already homed. Skipping homing."
{% endif %}
{% endif %}
{% if abl %}
{% if printer.z_tilt is defined %}
{% if not printer.z_tilt.applied %}
RATOS_ECHO MSG="Performing Z tilt adjustment..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% else %}
RATOS_ECHO MSG="Z tilt already applied. Skipping Z tilt adjustment."
{% endif %}
{% elif printer.quad_gantry_level is defined %}
{% if not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Performing quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% else %}
RATOS_ECHO MSG="Quad gantry leveling already applied. Skipping quad gantry leveling."
{% endif %}
{% else %}
RATOS_ECHO MSG="No automatic bed leveling method configured. Skipping bed leveling."
{% endif %}
{% endif %}
[gcode_macro PID_CALIBRATE_HOTEND]
description = Perform a PID calibration test for a given extruder heater.
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set temp = params.TEMP|default(220)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_HOTEND" MSG="TEMP={temp}"
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO MSG="PID calibration hotend heater T0 at {temp}°C..."
PID_CALIBRATE HEATER=extruder TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
{% if toolhead==0 or toolhead==1 %}
RATOS_ECHO MSG="PID calibration hotend heater T{toolhead} at {temp}°C..."
PID_CALIBRATE HEATER=extruder{'' if toolhead==0 else toolhead} TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_BED]
description = Perform a PID calibration test for the bed heater.
gcode =
{% set temp = params.TEMP|default(80)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_BED" MSG="TEMP={temp}"
RATOS_ECHO MSG="PID calibration bed heater at {temp}°C..."
PID_CALIBRATE HEATER=heater_bed TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_CHAMBER_HEATER]
description = Perform a PID calibration test for the chamber heater.
gcode =
{% set temp = params.TEMP|default(150)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_CHAMBER_HEATER" MSG="TEMP={temp}"
{% if printer["heater_generic chamber_heater"] is defined %}
RATOS_ECHO MSG="PID calibration chamber heater at {temp}°C..."
PID_CALIBRATE HEATER=chamber_heater TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_heater" %}
{% set link_text = "RatOS Chamber Heater" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber heater found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro INITIALIZE_PA_TUNING]
description = Start a pressure advance tuning tower.
gcode =
{% set start = params.START|default(0.0)|float %}
{% set factor = params.FACTOR|default(0.001)|float %}
{% set layer_number = printer["gcode_macro _ON_LAYER_CHANGE"].layer_number|default(0)|int %}
{% set is_printing_gcode = true if printer["gcode_macro START_PRINT"].is_printing_gcode|default(true)|lower == 'true' else false %}
{% if is_printing_gcode and layer_number < 2 %}
DEBUG_ECHO PREFIX="START_PA_TOWER" MSG="START: {start}, FACTOR: {factor}"
RATOS_ECHO MSG="Starting pressure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% else %}
RATOS_ECHO MSG="Pressure advance tuning tower requires you to be printing gcode and on layer 1 to start."
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro CHAMBER_FILTER_ON]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro CHAMBER_FILTER_OFF]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Deactivating chamber filter..."
_CHAMBER_FILTER_TURN_OFF
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro _CHAMBER_FILTER_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set chamber_filter_enable_at = printer["gcode_macro RatOS"].chamber_filter_enable_at|default('after_print_start')|lower %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_ON" MSG="at: {at}, chamber_filter_enable: {chamber_filter_enable}, chamber_filter_enable_at: {chamber_filter_enable_at}, chamber_filter_speed: {chamber_filter_speed}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if chamber_filter_enable_at == at %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON AT={at}
{% if chamber_filter_enable_at == "print_end" %}
_LED_CHAMBER_FILTER_ON
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_FILTER_OFF]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF" MSG="chamber_filter_enable: {chamber_filter_enable}, filter_disable_period: {filter_disable_period}, filter_disable_bed_temp: {filter_disable_bed_temp}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_period > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting {filter_disable_period} seconds before turning chamber filter off..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION={filter_disable_period}
{% endif %}
{% if filter_disable_bed_temp > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting for bed temp to cool down to {filter_disable_bed_temp}°C to turn filter off..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=0 MAXIMUM={filter_disable_bed_temp}
_CHAMBER_FILTER_TURN_OFF
_LED_CHAMBER_FILTER_OFF
{% endif %}
{% endif %}
[delayed_gcode _CHAMBER_FILTER_OFF_TIMER]
gcode =
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF_TIMER" MSG="executed"
_CHAMBER_FILTER_TURN_OFF
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Chamber filter turned off!"
_LED_CHAMBER_FILTER_OFF
[gcode_macro _CHAMBER_FILTER_TURN_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_speed|default(0)|float %}
{% if at == "print_end" %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_disable_speed|default(0)|float %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION=0
SET_FAN_SPEED FAN=filter SPEED={chamber_filter_speed}
[gcode_macro _CHAMBER_FILTER_TURN_OFF]
gcode =
SET_FAN_SPEED FAN=filter SPEED=0
[gcode_macro _CHAMBER_FILTER_SANITY_CHECK]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_bed_temp > 0 and filter_disable_period > 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable, not both.")}
{% endif %}
{% if filter_disable_bed_temp == 0 and filter_disable_period == 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable.")}
{% endif %}
{% endif %}
[gcode_macro CHAMBER_HEATER_ON]
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(45)|int %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp} IS_FROM_START_PRINT=False
[gcode_macro CHAMBER_HEATER_OFF]
gcode =
_CHAMBER_HEATER_OFF
[gcode_macro _CHAMBER_HEATER_ON]
variable_chamber_temp = 0
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set is_from_start_print = true if params.IS_FROM_START_PRINT|default(True)|lower == 'true' else false %}
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set chamber_heater_enable = true if printer["gcode_macro RatOS"].chamber_heater_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
{% set chamber_heater_preheating_temp = printer["gcode_macro RatOS"].chamber_heater_preheating_temp|default(150)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set chamber_heater_control_external_heater = true if printer["gcode_macro RatOS"].chamber_heater_control_external_heater|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_enable = true if printer["gcode_macro RatOS"].chamber_heater_air_circulation_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_fan_speed = printer["gcode_macro RatOS"].chamber_heater_air_circulation_fan_speed|default(0.35)|float %}
{% set chamber_heater_air_circulation_y_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_y_pos|default(0)|float %}
{% set chamber_heater_air_circulation_z_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_z_pos|default(100)|float %}
DEBUG_ECHO PREFIX="_CHAMBER_HEATER_ON" MSG="chamber_heater_enable: {chamber_heater_enable}, chamber_heater_preheating_temp: {chamber_heater_preheating_temp}, chamber_heater_heating_temp_offset: {chamber_heater_heating_temp_offset}, bed_temp: {bed_temp}, chamber_temp: {chamber_temp}, start_chamber_temp: {start_chamber_temp}"
{% if chamber_heater_enable and chamber_temp > 0 and chamber_heater_bed_temp > 0 %}
_LED_HEATING
RATOS_ECHO MSG="Preheating chamber to {(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}°C..."
{% set chamber_temp_sensor = "extruder" %}
{% if printer["dual_carriage"] is defined and default_toolhead == 1 %}
{% set chamber_temp_sensor = "extruder1" %}
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% set chamber_temp_sensor = "temperature_sensor chamber" %}
{% endif %}
{% set current_chamber_temp = printer['%s' % chamber_temp_sensor].temperature|int %}
{% set needs_heating = current_chamber_temp < (start_chamber_temp if start_chamber_temp > 0 else chamber_temp) %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_BEFORE_PREHEATING
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
{% if not is_from_start_print %}
MAYBE_HOME
{% endif %}
G0 Z{chamber_heater_air_circulation_z_pos} F{z_speed}
G0 Y{chamber_heater_air_circulation_y_pos} F{speed}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 1 else 0}
{% else %}
M106 S{(255 * chamber_heater_air_circulation_fan_speed)}
{% endif %}
{% else %}
{% if is_from_start_print %}
G0 Z{z} F{z_speed}
{% endif %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE={chamber_temp}
{% if needs_heating %}
M140 S{chamber_heater_bed_temp}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={chamber_heater_preheating_temp}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if needs_heating %}
_CHAMBER_HEATER_EXTRA_FAN_ON
{% endif %}
{% if needs_heating %}
TEMPERATURE_WAIT SENSOR="{chamber_temp_sensor}" MINIMUM={(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% endif %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED=0
_CHAMBER_FILTER_ON AT="before_print_start"
{% endif %}
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
G28 Z
{% endif %}
{% endif %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_AFTER_PREHEATING
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% if printer["heater_generic chamber_heater"] is defined %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined and chamber_heater_control_external_heater %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
_LED_SUCCESS
{% endif %}
[gcode_macro _CHAMBER_HEATER_OFF]
gcode =
RATOS_ECHO MSG="Deactivating chamber heater..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=0
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE=0
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
_CHAMBER_HEATER_EXTRA_FAN_OFF
[delayed_gcode _CHAMBER_HEATER_CONTROL]
initial_duration = 0.
gcode =
{% set chamber_temp = printer["gcode_macro _CHAMBER_HEATER_ON"].chamber_temp|default(0)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set current_chamber_temp = printer['temperature_sensor chamber'].temperature|int %}
{% if current_chamber_temp < chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if current_chamber_temp >= chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON]
gcode =
{% set chamber_heater_extra_fan_speed = printer["gcode_macro RatOS"].chamber_heater_extra_fan_speed|default(0.0)|float %}
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
{% if chamber_heater_extra_fan_speed > 0 %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED={chamber_heater_extra_fan_speed}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF]
gcode =
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED=0
{% endif %}
[gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING]
description = Will be executed before chamber preheating, only if heating is needed.
gcode =
[gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING]
description = Will be executed after chamber preheating, only if heating was needed.
gcode =
[gcode_macro _LED_START_PRINTING]
gcode =
_LED_ACTION
[gcode_macro _LED_START_PRINTING_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_PRINTING]
gcode =
_LED_ON TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_PAUSE]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_ON]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_OFF]
gcode =
_LED_STANDBY
[gcode_macro _LED_LOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_LOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_RUNOUT]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_CLOG]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_UNLOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_UNLOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_DEACTIVATE_TOOLHEAD]
gcode =
_LED_OFF TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_STANDBY]
gcode =
_LED_STANDBY TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_WAKEUP]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_MOTORS_OFF]
gcode =
_LED_STANDBY
_LED_VAOC_OFF
[gcode_macro _LED_INPUT_SHAPER_START]
gcode =
_LED_ACTION
[gcode_macro _LED_INPUT_SHAPER_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_START]
gcode =
_LED_ACTION
[gcode_macro _LED_BEACON_CALIBRATION_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_VAOC_ON]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=1.0 GREEN=1.0 BLUE=1.0
{% endif %}
[gcode_macro _LED_VAOC_OFF]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=0.0 GREEN=0.0 BLUE=0.0
{% endif %}
[gcode_macro _LED_ACTION]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_action %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SUCCESS]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_success %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_HEATING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_heating %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_COOLING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_cooling %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ERROR]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_error %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ON]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_on %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_OFF]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_off %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_STANDBY]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_standby %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
{% if toolhead >= 0 %}
{% if printer['neopixel nozzle_led_t%s' % toolhead] is defined %}
SET_LED LED={'nozzle_led_t%s' % toolhead} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% else %}
{% if printer['neopixel nozzle_led_t0'] is defined %}
SET_LED LED={'nozzle_led_t0'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% if printer['neopixel nozzle_led_t1'] is defined %}
SET_LED LED={'nozzle_led_t1'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% endif %}
_USER_LED_SET { rawparams }
[gcode_macro _USER_LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% if filament_name == '' or filament_type == '' %}
{% set filament_name = 'unknown' %}
{% set filament_type = 'unknown' %}
{% endif %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_LOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_LOAD_FILAMENT]
description = Load filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_LOAD_FILAMENT" MSG="TEMP={temp}"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=load_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
_LOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
RESTORE_GCODE_STATE NAME=load_state
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament load routine complete, please check that the filament was loaded correctly."
[gcode_macro _IDEX_LOAD_FILAMENT]
description = Load filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament into T{toolhead}..."
DEBUG_ECHO PREFIX="_IDEX_LOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
_LOAD_FILAMENT TOOLHEAD={toolhead} TEMP={temp} AUTOMATED={automated}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="Filament load routine for T{toolhead} complete, please check that the filament was loaded correctly."
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default(false)|lower == 'true' %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into hotend.."
G92 E0
G0 E{extruder_gear_to_cooling_position_distance} F{extruder_load_speed}
G92 E0
M400
RATOS_ECHO MSG="Filament loaded into hotend."
[gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set load_speed = printer["gcode_macro T%s" % toolhead].filament_load_speed|float * 60 %}
{% set filament_loading_nozzle_offset = printer["gcode_macro T%s" % toolhead].filament_loading_nozzle_offset|float %}
{% set cooling_position_to_nozzle_distance = printer["gcode_macro T%s" % toolhead].cooling_position_to_nozzle_distance|float %}
{% set purge_after_load = printer["gcode_macro T%s" % toolhead].purge_after_load|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into nozzle... Please wait!"
G92 E0
G0 E{cooling_position_to_nozzle_distance + filament_loading_nozzle_offset} F{load_speed}
G92 E0
G4 P1000
_PURGE_FILAMENT TOOLHEAD={toolhead} E={purge_after_load}
RATOS_ECHO MSG="Filament loaded into nozzle!"
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
{% set filament_grabbing_length = printer["gcode_macro T%s" % toolhead].filament_grabbing_length|float %}
{% set filament_grabbing_speed = printer["gcode_macro T%s" % toolhead].filament_grabbing_speed|float %}
{% set resume_after_insert = true if printer["gcode_macro T%s" % toolhead].resume_after_insert|default(true)|lower == 'true' else false %}
{% set enable_insert_detection = true if printer["gcode_macro T%s" % toolhead].enable_insert_detection|default(true)|lower == 'true' else false %}
{% set current_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% if enable_insert_detection %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="toolhead: {toolhead}, filament_grabbing_length: {filament_grabbing_length}, filament_grabbing_speed: {filament_grabbing_speed}, current_idex_mode: {current_idex_mode}"
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
RATOS_ECHO MSG="Filament inserted into T{toolhead}, loading..."
FORCE_MOVE STEPPER={'extruder%s' % ('' if toolhead == 0 else toolhead)} DISTANCE={filament_grabbing_length} VELOCITY={filament_grabbing_speed}
M400
{% if printer.pause_resume.is_paused %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% if resume_after_insert %}
RESUME
{% endif %}
{% else %}
{% if not printer.virtual_sdcard.is_active %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
[gcode_macro _PURGE_BEFORE_UNLOAD]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set purge_before_unload = printer["gcode_macro T%s" % toolhead].purge_before_unload|float %}
DEBUG_ECHO PREFIX="_PURGE_BEFORE_UNLOAD" MSG="TOOLHEAD: {toolhead}"
{% if purge_before_unload > 0 %}
G92 E0
G0 E{purge_before_unload} F300
G92 E0
M400
{% endif %}
[gcode_macro _PURGE_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set e = params.E|int %}
{% set r = params.R|default(0)|int %}
DEBUG_ECHO PREFIX="_PURGE_FILAMENT" MSG="TOOLHEAD: {toolhead}, E: {e}"
{% if e > 0 %}
G92 E0
G0 E{e} F300
G92 E0
M400
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={0.4 if toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={0.4 if toolhead == 1 else 0}
{% else %}
M106 S{(255 * 0.4)}
{% endif %}
{% endif %}
G4 P3000
{% if r > 0 %}
G92 E0
G0 E-{r} F300
G92 E0
M400
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{loading_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CLEANING_MOVE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_CLEANING_MOVE" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].parking_position is defined and printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% set cleaning_position = loading_position %}
{% if loading_position == parking_position %}
{% if loading_position > 0 %}
{% set cleaning_position = loading_position - 30 %}
{% else %}
{% set cleaning_position = loading_position + 30 %}
{% endif %}
{% endif %}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _BED_MESH_SANITY_CHECK]
gcode =
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is defined %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_start_print_true_zero_fuzzy_position %}
CONSOLE_ECHO TYPE="error" TITLE="Defined zero reference not compatible with fuzzy true zero" MSG="Using fuzzy start print true zero position is not compatible with a defined zero_reference_position value in the [bed_mesh] section in printer.cfg._N_Please remove the zero_reference_position value from the [bed_mesh] section, or disable fuzzy true zero position in printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_start_print_true_zero_fuzzy_position: False"
_STOP_AND_RAISE_ERROR MSG="Defined zero reference not compatible with fuzzy true zero"
{% elif zero_ref_pos[0]|float|round != safe_home_x|float|round or zero_ref_pos[1]|float|round != safe_home_y|float|round %}
CONSOLE_ECHO TYPE="error" TITLE="Zero reference position does not match safe home position" MSG="Please update your bed mesh zero reference position in printer.cfg, like so:_N__N_[bed_mesh]_N_zero_reference_position: {safe_home_x|float|round},{safe_home_y|float|round}_N_"
_STOP_AND_RAISE_ERROR MSG="Zero reference position does not match safe home position"
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if beacon_contact_bed_mesh %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact bed mesh is enabled" MSG="Beacon contact bed mesh is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_bed_mesh: False"
{% endif %}
{% if beacon_scan_method_automatic %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon 'automatic' scan method is enabled" MSG="Beacon 'automatic' scan method is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_scan_method_automatic: False"
{% endif %}
{% if beacon_contact_z_tilt_adjust %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact z-tilt adjust is enabled" MSG="Beacon contact z-tilt adjust is enabled. This is not recommended for normal use and may result in inaccurate z-tilt adjustment._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_z_tilt_adjust: False"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH]
gcode =
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE=None
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE=None
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION {rawparams}
{% endif %}
[gcode_macro _START_PRINT_BED_MESH]
variable_actual_true_zero_position_x = None
variable_actual_true_zero_position_y = None
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
SET_MACRO_TRAVEL_SETTINGS
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set X=[params.X0|default(-1)|float, params.X1|default(-1)|float] %}
{% set Y=[params.Y0|default(-1)|float, params.Y1|default(-1)|float] %}
DEBUG_ECHO PREFIX="_START_PRINT_BED_MESH" MSG="idex_mode: {idex_mode}, X: {X}, Y: {Y}"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is not defined %}
{% set zero_ref_pos = [safe_home_x if actual_true_zero_position_x is none else actual_true_zero_position_x, safe_home_y if actual_true_zero_position_y is none else actual_true_zero_position_y] %}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set X=[0, printable_x_max] %}
{% endif %}
{% set beacon_bed_mesh_scv = printer["gcode_macro RatOS"].beacon_bed_mesh_scv|default(25)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and not beacon_contact_bed_mesh %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={beacon_bed_mesh_scv}
{% endif %}
{% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %}
{% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %}
BED_MESH_CLEAR
{% if printer["gcode_macro RatOS"].adaptive_mesh|lower == 'true' %}
CALIBRATE_ADAPTIVE_MESH PROFILE="{default_profile}" X0={X[0]} X1={X[1]} Y0={Y[0]} Y1={Y[1]} T={params.T|int} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={idex_mode} ZERO_REF_POS_X={zero_ref_pos[0]} ZERO_REF_POS_Y={zero_ref_pos[1]}
{% else %}
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD="{default_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD="{printer["gcode_macro RatOS"].bed_mesh_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
[gcode_macro CALIBRATE_ADAPTIVE_MESH]
gcode =
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set default_profile = params.PROFILE %}
{% set x0 = params.X0|default(-1)|float %}
{% set y0 = params.Y0|default(-1)|float %}
{% set x1 = params.X1|default(-1)|float %}
{% set y1 = params.Y1|default(-1)|float %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Received coordinates X0={x0|round(1)} Y0={y0|round(1)} X1={x1|round(1)} Y1={y1|round(1)}"
{% if x0 >= x1 or y0 >= y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Invalid coordinates received. Please check your slicer settings. Falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if params.ZERO_REF_POS_X is defined and params.ZERO_REF_POS_Y is defined %}
{% set zero_ref_pos_x = params.ZERO_REF_POS_X|float %}
{% set zero_ref_pos_y = params.ZERO_REF_POS_Y|float %}
{% if zero_ref_pos_x < x0 or zero_ref_pos_x > x1 or zero_ref_pos_y < y0 or zero_ref_pos_y > y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Zero reference position X={zero_ref_pos_x|round(1)} Y={zero_ref_pos_y|round(1)} is outside the mesh region, expanding mesh region to include it."
{% set x0 = [x0, zero_ref_pos_x]|min %}
{% set y0 = [y0, zero_ref_pos_y]|min %}
{% set x1 = [x1, zero_ref_pos_x]|max %}
{% set y1 = [y1, zero_ref_pos_y]|max %}
{% endif %}
{% endif %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float %}
{% set mesh_x0 = [[x0, max_x]|min, min_x]|max %}
{% set mesh_y0 = [[y0, max_y]|min, min_y]|max %}
{% set mesh_x1 = [[x1, max_x]|min, min_x]|max %}
{% set mesh_y1 = [[y1, max_y]|min, min_y]|max %}
{% if mesh_x0 == min_x and mesh_y0 == min_y and mesh_x1 == max_x and mesh_y1 == max_y %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Print is using the full bed, falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% set probe_count_x = mesh_config.probe_count.split(",")[0]|int %}
{% if mesh_config.probe_count.split(",")|length == 2 %}
{% set probe_count_y = mesh_config.probe_count.split(",")[1]|int %}
{% else %}
{% set probe_count_y = mesh_config.probe_count.split(",")[0]|int %}
{% endif %}
{% set probe_x_step = (max_x - min_x) / probe_count_x %}
{% set probe_y_step = (max_y - min_y) / probe_count_y %}
{% set mesh_count_x = ([(mesh_x1 - mesh_x0) / probe_x_step, 3]|max)|int %}
{% set mesh_count_y = ([(mesh_y1 - mesh_y0) / probe_y_step, 3]|max)|int %}
{% set min_mesh_count = [mesh_count_x, mesh_count_y]|min %}
{% set max_mesh_count = [mesh_count_x, mesh_count_y]|max %}
{% set algorithm = mesh_config.algorithm %}
{% if algorithm|lower == 'lagrange' and max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="cannot exceed a probe_count of 6 when using lagrange interpolation. Falling back to bicubic interpolation."
{% set algorithm = 'bicubic' %}
{% endif %}
{% if algorithm|lower == 'bicubic' and min_mesh_count < 4 %}
{% if max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="invalid probe_count option when using bicubic interpolation. Combination of 3 points on one axis with more than 6 on another is not permitted. Forcing minimum mesh count to be 4."
{% set min_mesh_count = 4 %}
{% else %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="bicubic interpolation with a probe_count of less than 4 points detected. Forcing lagrange interpolation."
{% set algorithm = 'lagrange' %}
{% endif %}
{% endif %}
{% set mesh_count_x = ([min_mesh_count, mesh_count_x]|max)|int %}
{% set mesh_count_x = ([max_mesh_count, mesh_count_x]|min)|int %}
{% set mesh_count_y = ([min_mesh_count, mesh_count_y]|max)|int %}
{% set mesh_count_y = ([max_mesh_count, mesh_count_y]|min)|int %}
{% set should_prime = printer["gcode_macro RatOS"].nozzle_priming == 'primeblob' %}
{% if printer["dual_carriage"] is not defined %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% else %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 == 0 and not probe_first %}
{% set probe_first = true %}
{% endif %}
{% if should_prime and probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="mesh coordinates X0={mesh_x0|round(1)} Y0={mesh_y0|round(1)} X1={mesh_x1|round(1)} Y1={mesh_y1|round(1)}"
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y} RELATIVE_REFERENCE_INDEX=-1
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% if should_prime and not probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M84]
rename_existing = M84.1
gcode =
M84.1
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_OFFSET X=0 Y=0
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=SET_PRESSURE_ADVANCE VARIABLE=snyc_toolheads VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro _VAOC"] is defined %}
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started VALUE=False
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started_at_temp VALUE=False
{% endif %}
_IDEX_SINGLE INIT=1
{% endif %}
SET_SKEW CLEAR=1
_LED_MOTORS_OFF
[gcode_macro M104]
rename_existing = M104.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
DEBUG_ECHO PREFIX="M104" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set temperature_offset_t0 = printer["gcode_macro T0"].temperature_offset|default(0)|int %}
{% set temperature_offset_t1 = printer["gcode_macro T1"].temperature_offset|default(0)|int %}
{% set s0 = [s + temperature_offset_t0, 0]|max %}
{% set s1 = [s + temperature_offset_t1, 0]|max %}
{% if temperature_offset_t0 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t0}°C added to toolhead T0."
{% endif %}
{% if temperature_offset_t1 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t1}°C added to toolhead T1."
{% endif %}
{% else %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% else %}
M104.1 S{s} T{t}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M109]
rename_existing = M109.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
DEBUG_ECHO PREFIX="M109" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M109" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
M109.1 S{s} T{t}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro SET_HEATER_TEMPERATURE]
rename_existing = SET_HEATER_TEMPERATURE_BASE
gcode =
{% set heater = params.HEATER|default("") %}
{% set target = params.TARGET|default(0)|int %}
DEBUG_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="heater: {heater}, target: {target}"
{% set t = -1 %}
{% if heater|lower == "extruder" or heater|lower == "extruder1" %}
{% set t = 0 if heater|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and target > 0 %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set target = [target + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
SET_HEATER_TEMPERATURE_BASE HEATER="{heater}" TARGET={target}
{% if t != -1 and printer.fastconfig.settings.beacon is defined %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro TEMPERATURE_WAIT]
rename_existing = TEMPERATURE_WAIT_BASE
gcode =
{% set sensor = params.SENSOR|default("") %}
{% set minimum = params.MINIMUM|default(-1)|int %}
{% set maximum = params.MAXIMUM|default(-1)|int %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="sensor: {sensor}, minimum: {minimum}, maximum: {maximum}"
{% set t = -1 %}
{% if sensor|lower == "extruder" or sensor|lower == "extruder1" %}
{% set t = 0 if sensor|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and (minimum > 0 or maximum > 0) %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% if minimum > -1 %}
{% set minimum = [minimum + temperature_offset, 0]|max %}
{% endif %}
{% if maximum > -1 %}
{% set maximum = [maximum + temperature_offset, 0]|max %}
{% endif %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set id = "sensor " ~ sensor if t == -1 else "toolhead T" ~ t %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum} MAXIMUM={maximum}
{% elif minimum > -1 and maximum == -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum}
{% elif minimum == -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% else %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="neither MINIMUM or MAXIMUM args were specified, call TEMPERATURE_WAIT_BASE is expected to fail"
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}"
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for {id} reached."
[gcode_macro SDCARD_PRINT_FILE]
rename_existing = SDCARD_PRINT_FILE_BASE
gcode =
{% if printer["ratos"] is defined %}
PROCESS_GCODE_FILE { rawparams }
{% else %}
SDCARD_PRINT_FILE_BASE { rawparams }
{% endif %}
[gcode_macro SKEW_PROFILE]
rename_existing = SKEW_PROFILE_BASE
variable_loaded_profile = ""
gcode =
{% if params.LOAD is defined %}
{% if printer.fastconfig.settings["skew_correction %s" % params.LOAD] is defined %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='"{params.LOAD}"'
{% endif %}
{% endif %}
SKEW_PROFILE_BASE { rawparams }
[gcode_macro SET_SKEW]
rename_existing = SET_SKEW_BASE
gcode =
{% if params.CLEAR is defined %}
{% if params.CLEAR|default(0)|int == 1 %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='""'
{% endif %}
{% endif %}
SET_SKEW_BASE { rawparams }
[gcode_macro SET_VELOCITY_LIMIT]
rename_existing = SET_VELOCITY_LIMIT_BASE
gcode =
{% if params.ACCEL_TO_DECEL is defined %}
{% if params.ACCEL is defined %}
{% set accel = params.ACCEL|float %}
{% else %}
{% set accel = printer.toolhead.max_accel|float %}
{% endif %}
{% if params.VELOCITY is defined %}
{% set velocity = params.VELOCITY|float %}
{% else %}
{% set velocity = printer.toolhead.max_velocity|float %}
{% endif %}
{% if params.SQUARE_CORNER_VELOCITY is defined %}
{% set scv = params.SQUARE_CORNER_VELOCITY|float %}
{% else %}
{% set scv = printer.toolhead.square_corner_velocity|float %}
{% endif %}
{% set mcr = params.ACCEL_TO_DECEL|float / accel %}
DEBUG_ECHO PREFIX="SET_VELOCITY_LIMIT" MSG="ACCEL={accel}, VELOCITY={velocity}, SQUARE_CORNER_VELOCITY={scv}, MINIMUM_CRUISE_RATIO={mcr}"
SET_VELOCITY_LIMIT_BASE ACCEL={accel} VELOCITY={velocity} SQUARE_CORNER_VELOCITY={scv} MINIMUM_CRUISE_RATIO={1-mcr}
{% else %}
SET_VELOCITY_LIMIT_BASE { rawparams }
{% endif %}
[gcode_macro BED_MESH_CALIBRATE]
rename_existing = _BED_MESH_CALIBRATE_BASE
variable_abl_and_home_z_if_required = True
gcode =
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% if abl_and_home_z_if_required %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set beacon_default_probe_method = printer.fastconfig.settings.beacon.default_probe_method|default('proximity') %}
{% set probe_method = params.PROBE_METHOD|default(beacon_default_probe_method)|lower %}
{% if probe_method == 'proximity' %}
_CHECK_ACTIVE_BEACON_MODEL_TEMP TITLE="Bed mesh calibration warning"
{% endif %}
{% endif %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_BED_MESH_CALIBRATE_BASE {rawparams}
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_APPLY_RATOS_BED_MESH_PARAMETERS {rawparams}
{% endif %}
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_BASE
gcode =
DEBUG_ECHO PREFIX="SET_GCODE_OFFSET" MSG="{rawparams|replace('"', '')|replace("'", '')}"
{% set z_before = printer.gcode_move.homing_origin.z|float %}
SET_GCODE_OFFSET_BASE {rawparams}
_AFTER_SET_GCODE_OFFSET Z_BEFORE={z_before}
[gcode_macro _AFTER_SET_GCODE_OFFSET]
gcode =
{% set z_before = params.Z_BEFORE|float %}
{% set z_after = printer.gcode_move.homing_origin.z|float %}
{% if z_before != z_after %}
_ALERT_NON_ZERO_Z_OFFSET FORCE=1
{% endif %}
[gcode_macro _START_PRINT_PARK]
gcode =
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_x = printer["gcode_macro RatOS"].start_print_park_x %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% endif %}
{% if printer["dual_carriage"] is defined and not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% if printer["gcode_macro RatOS"].start_print_park_x is defined and printer["gcode_macro RatOS"].start_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="start_print_park_x is ignored for IDEX printers"
{% endif %}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={start_print_park_in} X={start_print_park_x}
G0 Z{z} F{z_speed}
[gcode_macro _END_PRINT_PARK]
gcode =
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro RatOS"].end_print_park_x is defined and printer["gcode_macro RatOS"].end_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="end_print_park_x is ignored for IDEX printers"
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x}
[gcode_macro _PARK]
gcode =
{% set x = params.X %}
{% set location = params.LOCATION|default('back')|lower %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set nozzle_priming = printer["gcode_macro RatOS"].nozzle_priming|lower %}
CACHE_TOOLHEAD_SETTINGS KEY="park"
SET_MACRO_TRAVEL_SETTINGS
{% if x != '' %}
{% if x|float >= printer.toolhead.axis_minimum.x + 5 and x|float <= printable_x_max - 5 %}
{% set park_x = x|float %}
{% else %}
{action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% else %}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% set park_y = printable_y_max - 15 %}
{% if location == 'front' %}
{% set park_y = printer.toolhead.axis_minimum.y + 5 %}
{% elif location == 'center' %}
{% set park_y = printable_y_max / 2 %}
{% elif location == 'primeblob' and printer["dual_carriage"] is defined %}
{% set park_y = printable_y_max - 15 %}
{% endif %}
{% if location == 'primeblob' and printer["dual_carriage"] is not defined %}
{% if (nozzle_priming == 'primeblob' or nozzle_priming == 'primeline') %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set park_x = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set park_x = printable_x_max - 5 %}
{% else %}
{% set park_x = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set park_y = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set park_y = printable_y_max - 5 %}
{% else %}
{% set park_y = nozzle_prime_start_y|float %}
{% endif %}
{% endif %}
{% endif %}
G90
{% if printer["dual_carriage"] is not defined %}
G0 X{park_x} Y{park_y} F{speed}
{% else %}
G0 Y{park_y} F{speed}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="park"
[gcode_macro SAVE_PROBE_RESULT]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
{% set last_z_offset = 9999.9 %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set current_z = printer.toolhead.position.z|float %}
{% if beacon_contact_prime_probing %}
{% set last_z_offset = printer.beacon.last_z_result %}
{% else %}
{% set last_z_offset = printer.beacon.last_sample.dist - current_z %}
{% endif %}
{% elif printer.fastconfig.settings.bltouch is defined %}
{% set config_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set config_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Saving offset adjustment of {last_z_offset} in {params.VARIABLE|default('last_z_offset')}"
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE={params.VARIABLE|default('last_z_offset')} VALUE={last_z_offset}
[gcode_macro PROBE_FOR_PRIMING]
gcode =
{% set probe_for_priming_disable_mesh_constraints = true if printer["gcode_macro RatOS"].probe_for_priming_disable_mesh_constraints|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower != 'false' %}
SAVE_GCODE_STATE NAME=probe_for_priming_state
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the prime location.."
CACHE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
SET_MACRO_TRAVEL_SETTINGS
{% set t = params.TOOLHEAD|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% if idex_mode == '' %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% if t == 0 %}
{% set x_start = 5 %}
{% else %}
{% set x_start = printable_x_max - 5 %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% endif %}
{% endif %}
{% set z = printer.fastconfig.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% if printer.fastconfig.settings.bltouch is defined %}
{% set x_offset = printer.fastconfig.settings.bltouch.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.bltouch.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set x_offset = printer.fastconfig.settings.probe.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.probe.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% elif printer.fastconfig.settings.beacon is defined %}
{% set x_offset = printer.fastconfig.settings.beacon.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.beacon.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.beacon.trigger_distance|float %}
{% else %}
{ action_raise_error("No probe, beacon or bltouch section found. Adaptive priming only works with a [probe], [beacon] or [bltouch] section defined.") }
{% endif %}
{% if z < z_offset %}
{ action_raise_error("Horizontal move Z ({z}) is below your probe's Z offset ({z_offset}). Please adjust your horizontal_move_z setting in [bed_mesh] to be above {z}.") }
{% endif %}
{% if not probe_for_priming_disable_mesh_constraints %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float - x_offset %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float - y_offset %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float - x_offset %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float - y_offset %}
{% set x_start = [[x_start, max_x]|min, min_x]|max %}
{% set y_start = [[y_start, max_y]|min, min_y]|max %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the start of the prime location at {x_start}, {y_start}"
G90
M83
G0 Z{z} F{z_speed}
G1 X{x_start} Y{y_start} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result
{% endif %}
{% if idex_mode == '' %}
{% set x_end = x_start %}
{% set y_end = y_start + 45 %}
{% else %}
{% if t==1 %}
{% set x_end = x_start - 45 %}
{% else %}
{% set x_end = x_start + 45 %}
{% endif %}
{% set y_end = y_start %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the end of the prime location at {x_end}, {y_end}"
G1 X{x_end} Y{y_end} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result
{% endif %}
RESTORE_GCODE_STATE NAME=probe_for_priming_state
RESTORE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
{% endif %}
[gcode_macro RESET_PRIME_PROBE_STATE]
gcode =
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result VALUE=None
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result_t1 VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result_t1 VALUE=None
{% endif %}
[gcode_macro PROBE_CURRENT_POSITION]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
SAVE_GCODE_STATE NAME=probe_current_position_state
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
ASSERT_PROBE_DEPLOYED
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
BEACON_QUERY
{% else %}
RESTORE_GCODE_STATE NAME=probe_current_position_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_z_speed|float}
{% endif %}
[gcode_macro PRIME_BLOB]
description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro.
variable_x_offset = 5
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="prime_blob"
SET_MACRO_TRAVEL_SETTINGS
RATOS_ECHO PREFIX="Priming" MSG="Priming nozzle with prime blob.."
{% set current_toolhead = 0 %}
{% set target_idex_mode = '' %}
{% set extruder = 'extruder' %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE is defined %}
{% set target_idex_mode = params.IDEX_MODE|default('')|lower %}
{% else %}
{ action_raise_error("IDEX_MODE parameter not found for PRIME_BLOB macro. This is likely a bug.") }
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Priming in IDEX {target_idex_mode} mode.."
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set current_toolhead = 1 if current_idex_mode=='primary' else 0 %}
{% set extruder = 'extruder1' if current_toolhead == 1 else 'extruder' %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
SAVE_GCODE_STATE NAME=prime_blob_state
{% endif %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|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 fan_speed = printer["gcode_macro RatOS"].nozzle_prime_bridge_fan|float %}
{% set nozzle_diameter = printer.fastconfig.settings[extruder].nozzle_diameter|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set has_start_offset_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) != 9999.9 %}
{% if printer["dual_carriage"] is defined %}
{% set has_start_offset_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) != 9999.9 %}
{% endif %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_z_height = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set nozzle_prime_direction = printer["gcode_macro RatOS"].nozzle_prime_direction|lower %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% if target_idex_mode == '' %}
{% set x_factor = 0 %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% set y_factor = 1 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% set y_factor = -1 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% if nozzle_prime_start_y|float < printable_y_max / 2 %}
{% set y_factor = 1 %}
{% else %}
{% set y_factor = -1 %}
{% endif %}
{% endif %}
{% if nozzle_prime_direction == 'forwards' %}
{% set y_factor = 1 %}
{% elif nozzle_prime_direction == 'backwards' %}
{% set y_factor = -1 %}
{% endif %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% else %}
{% set z = start_print_park_z_height %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% set y_factor = 0 %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set x_start = center_x / 2 + 5 %}
{% set x_factor = 1 %}
{% else %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% if current_toolhead == 0 %}
{% set x_start = 55 %}
{% set x_factor = -1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 55 %}
{% set x_factor = 1 %}
{% endif %}
{% else %}
{% if current_toolhead == 0 %}
{% set x_start = 5 %}
{% set x_factor = 1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 5 %}
{% set x_factor = -1 %}
{% endif %}
{% endif %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_x_max - 5 %}
{% endif %}
{% set z = 10 %}
{% endif %}
{% set start_z_offset = 0 %}
{% set end_z_offset = 0 %}
{% if has_start_offset_t0 %}
{% set start_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %}
{% set end_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_end_result|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t0) ) }
{% endif %}
{% if end_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t0) ) }
{% endif %}
{% set start_z_offset = start_z_probe_result_t0 %}
{% set end_z_offset = end_z_probe_result_t0 %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if current_toolhead == 1 or both_toolheads or target_idex_mode == "copy" or target_idex_mode == "mirror" %}
{% if has_start_offset_t1 %}
{% set start_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) %}
{% set end_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_end_result_t1|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t1) ) }
{% endif %}
{% if end_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t1) ) }
{% endif %}
{% set start_z_offset = [start_z_offset, start_z_probe_result_t1]|max %}
{% set end_z_offset = [end_z_offset, start_z_probe_result_t1]|max %}
{% endif %}
{% endif %}
{% if target_idex_mode != 'copy' and target_idex_mode != 'mirror' %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% set original_start_z_offset = start_z_offset %}
{% set original_end_z_offset = end_z_offset %}
{% set start_z_offset = original_end_z_offset %}
{% set end_z_offset = original_start_z_offset %}
{% endif %}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
DEBUG_ECHO PREFIX="PRIME_BLOB" MSG="x_start: {x_start}, y_start: {y_start}, x_factor: {x_factor}, y_factor: {y_factor}, z: {z}, start_z_offset: {start_z_offset}, end_z_offset: {end_z_offset}"
G90
M83
RATOS_ECHO PREFIX="Priming" MSG="Lifting Z to {z}.."
G0 Z{z} F{z_speed}
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% if start_print_park_in != 'primeblob' %}
G1 X{x_start} F{speed}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% endif %}
{% else %}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% if target_idex_mode=="copy" or target_idex_mode=="mirror" %}
RATOS_ECHO PREFIX="Priming" MSG="Mirroring move to {x_start}, {y_start} along the edge of the print area.."
_IDEX_MIRROR PRIMING=1
{% else %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% endif %}
G1 X{x_start} F{speed}
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Starting prime blob.."
G1 Z{0.5 + start_z_offset} F{z_speed}
G1 Y{y_start} F{speed}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
M106 S{fan_speed}
G1 Z5 F100 E5
G92 E0
RATOS_ECHO PREFIX="Priming" MSG="Bridging with {((fan_speed/255) * 100)|int}% fan speed.."
G1 F3000 X{x_start + (15 * x_factor)} Y{y_start + (15 * y_factor)} E{1 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (20 * x_factor)} Y{y_start + (20 * y_factor)} Z{3.8 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (34 * x_factor)} Y{y_start + (34 * y_factor)} Z{2.6 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (38 * x_factor)} Y{y_start + (38 * y_factor)} Z{1.4 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (42 * x_factor)} Y{y_start + (42 * y_factor)} Z{0.2 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
M106 S0
G1 F3000 X{x_start + (46 * x_factor)} Y{y_start + (46 * y_factor)} Z{0.2 + end_z_offset} E0.6
G1 F{speed} X{x_start + (50 * x_factor)} Y{y_start + (50 * y_factor)}
{% if target_idex_mode == "copy" or target_idex_mode == "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if target_idex_mode == "copy" %}
{% if first_y >= 0 %}
_IDEX_COPY DANCE=0 Y={first_y}
{% else %}
_IDEX_COPY DANCE=0 Y={params.Y1}
{% endif %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
RESTORE_GCODE_STATE NAME=prime_blob_state
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="prime_blob"
G92 E0
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_UNLOAD_FILAMENT]
description = Unload filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_UNLOAD_FILAMENT" MSG="TEMP: {temp}"
_LED_UNLOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=unload_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD=0 NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
{% endif %}
RESTORE_GCODE_STATE NAME=unload_state
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament unloading completed"
[gcode_macro _IDEX_UNLOAD_FILAMENT]
description = Unload filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading T{toolhead} filament..."
DEBUG_ECHO PREFIX="_IDEX_UNLOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} AUTOMATED={automated}
{% endif %}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="T{toolhead} filament unloading completed"
[gcode_macro _UNLOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LEGACY_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 =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set unload_speed = 5 * 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 F6000
G0 E-15 F6000
G0 E-{unload_length} F{unload_speed}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Unloading filament from nozzle to cooling zone... Please wait!"
_PURGE_BEFORE_UNLOAD TOOLHEAD={toolhead}
{% if printer["gcode_macro _UNLOAD_WITHOUT_TIP_FORMING"] is defined %}
_UNLOAD_WITHOUT_TIP_FORMING TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
{% else %}
_UNLOAD_WITH_TIP_FORMING NAME='{filament_name}' TYPE='{filament_type}'
{% endif %}
G4 P3000
[gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
{% set tooolhead_sensor_to_extruder_gear_distance = printer["gcode_macro T%s" % toolhead].tooolhead_sensor_to_extruder_gear_distance|float %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER" MSG="TOOLHEAD: {toolhead}"
G0 E-{extruder_gear_to_cooling_position_distance + tooolhead_sensor_to_extruder_gear_distance + 50} F{extruder_load_speed}
RATOS_ECHO MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_WITH_TIP_FORMING]
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% if filament_name != '' and filament_type != '' %}
_UNLOAD_KNOWN_FILAMENT NAME={filament_name} TYPE={filament_type}
{% else %}
_UNLOAD_UNKNOWN_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _UNLOAD_KNOWN_FILAMENT]
description = User overrideable tip forming macro if slicer filament profiles are known
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
RATOS_ECHO PREFIX="FILAMENT TYPE" MSG='{filament_type}'
RATOS_ECHO PREFIX="FILAMENT PROFILE" MSG='{filament_name}'
{% if filament_name == "Prusament PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% elif filament_name == "Nobufil PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% else %}
RATOS_ECHO PREFIX="_UNLOAD_KNOWN_FILAMENT" MSG="Filament profile not found!"
_UNLOAD_UNKNOWN_FILAMENT
{% endif %}
[gcode_macro _UNLOAD_UNKNOWN_FILAMENT]
description = User overrideable standard tip forming macro
gcode =
DEBUG_ECHO PREFIX="_UNLOAD_UNKNOWN_FILAMENT" MSG="Using standard tip forming macro!"
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
[gcode_macro _TIP_FORMING]
gcode =
{% set cooling_moves = params.COOLING_MOVES|default(4)|int %}
{% set cooling_move_length = params.COOLING_MOVE_LENGTH|default(10)|float %}
{% set start_cooling_speed = params.START_COOLING_SPEED|default(10)|float * 60 %}
{% set end_cooling_speed = params.END_COOLING_SPEED|default(50)|float * 60 %}
{% if cooling_moves == 0 %}
{% set cooling_move_length = 0 %}
{% endif %}
{% set dip = true if params.DIP|default(false)|lower == "true" else false %}
{% set dip_length = params.DIP_LENGTH|default(22)|float %}
{% set dip_speed = params.DIP_SPEED|default(30)|float * 60 %}
{% set dip_retract_speed = params.DIP_RETRACT_SPEED|default(70)|float * 60 %}
{% set retract_length = params.RETRACT_LENGTH|default(18)|float %}
{% set start_retract_speed = params.START_RETRACT_SPEED|default(120)|float * 60 %}
{% set end_retract_speed = params.END_RETRACT_SPEED|default(20)|float * 60 %}
DEBUG_ECHO PREFIX="_TIP_FORMING" MSG="cooling_moves: {cooling_moves}, cooling_move_length: {cooling_move_length}, start_cooling_speed: {start_cooling_speed}, end_cooling_speed: {end_cooling_speed}, dip: {dip}, dip_length: {dip_length}, dip_speed: {dip_speed}, dip_retract_speed: {dip_retract_speed}, retract_length: {retract_length}, start_retract_speed: {start_retract_speed}, end_retract_speed: {end_retract_speed}"
M220 S100
G92 E0
{% set retract = retract_length + cooling_move_length / 2 - 15 %}
G1 E-15 F{start_retract_speed}
G1 E-{0.7 * retract} F{1.0 * end_retract_speed}
G1 E-{0.2 * retract} F{0.5 * end_retract_speed}
G1 E-{0.1 * retract} F{0.3 * end_retract_speed}
G92 E0
{% if cooling_moves > 0 %}
{% set i = (end_cooling_speed - start_cooling_speed) / (2 * cooling_moves - 1) %}
{% for m in range(cooling_moves) %}
G1 E{cooling_move_length} F{(start_cooling_speed + i * m * 2)}
G1 E-{cooling_move_length} F{(start_cooling_speed + i * (m * 2 + 1))}
{% endfor %}
{% endif %}
G92 E0
{% if dip %}
G1 E{dip_length} F{dip_speed}
G4 P100
G1 E-{dip_length} F{dip_retract_speed}
{% endif %}
G92 E0
M400
[delayed_gcode __ON_FILAMENT_SENSOR_BUTTON_PRESSED_STARTUP_GUARD]
initial_duration = 2.
gcode =
SET_GCODE_VARIABLE MACRO=_ON_FILAMENT_SENSOR_BUTTON_PRESSED VARIABLE=startup_complete VALUE=True
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
variable_startup_complete = False
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set toolhead_sensor_button_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_sensor_button_only_when_sensor_enabled|default(false)|lower == 'true' %}
{% if not startup_complete and sensor_enabled %}
{action_emergency_stop("RatOS: The T%s filament sensor button was triggered immediately on printer startup. This is likely a false trigger. Please check your filament sensor wiring and configuration!" % (toolhead,))}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}, SENSOR_ENABLED: {sensor_enabled}, TOOLHEAD_SENSOR_BUTTON_ONLY_WHEN_SENSOR_ENABLED: {toolhead_sensor_button_only_when_sensor_enabled}"
{% if not printer.virtual_sdcard.is_active and (sensor_enabled or not toolhead_sensor_button_only_when_sensor_enabled) %}
UNLOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
{% set toolhead_detect_clog_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_detect_clog_only_when_sensor_enabled|default(true)|lower == 'true' %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}, ENABLE_CLOG_DETECTION: {enable_clog_detection}, TOOLHEAD_DETECT_CLOG_ONLY_WHEN_SENSOR_ENABLED: {toolhead_detect_clog_only_when_sensor_enabled}, SENSOR_ENABLED: {sensor_enabled}"
{% if enable_clog_detection and (sensor_enabled or not toolhead_detect_clog_only_when_sensor_enabled) %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_FILAMENT_END]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set clogged = true if params.CLOGGED|default(false)|lower == 'true' else false %}
{% set unload_after_runout = printer["gcode_macro T%s" % toolhead].unload_after_runout|float %}
{% if clogged %}
_LED_FILAMENT_CLOG TOOLHEAD={toolhead}
{% else %}
_LED_FILAMENT_RUNOUT TOOLHEAD={toolhead}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_END" MSG="TOOLHEAD: {toolhead}"
{% if printer.virtual_sdcard.is_active %}
{% if not printer.pause_resume.is_paused %}
PAUSE RUNOUT=True
{% endif %}
{% if not clogged and unload_after_runout %}
UNLOAD_FILAMENT TOOLHEAD={toolhead} AUTOMATED=True
{% endif %}
{% if not clogged and printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true'%}
_JOIN_SPOOL TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M600]
description = Executes a color change by pausing the printer an unloading the filament.
gcode =
PAUSE
UNLOAD_FILAMENT AUTOMATED=True
RATOS_ECHO MSG="Please load new filament and resume"
[gcode_macro COLD_PULL]
description = Automated hotend cold pull.
gcode =
{% set extrusion_temp = params.EXTRUSION_TEMP|default(220)|int %}
{% set cold_pull_temp = params.COLD_PULL_TEMP|default(80)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% if printer["dual_carriage"] is not defined %}
{% set toolhead = 0 %}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead != 0 and toolhead != 1 %}
{action_raise_error("Please select toolhead! 0 = left, 1 = right toolhead")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
RATOS_ECHO MSG="Starting cold pull on T{toolhead}..."
{% else %}
RATOS_ECHO MSG="Starting cold pull..."
{% endif %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if printer["dual_carriage"] is defined and "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
RATOS_ECHO MSG="Heating T{toolhead} to {extrusion_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={extrusion_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={extrusion_temp} MAXIMUM={extrusion_temp + 2}
G4 P3000
RATOS_ECHO MSG="extruding..."
G92 E0
G1 E30 F300
G92 E0
RATOS_ECHO MSG="Cooling T{toolhead} to {cold_pull_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={cold_pull_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={cold_pull_temp} MAXIMUM={cold_pull_temp + 2}
G4 P10000
RATOS_ECHO MSG="cold pull..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-40 VELOCITY=5 ACCEL=100
RATOS_ECHO MSG="eject filament..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-200 VELOCITY=20 ACCEL=500
RATOS_ECHO MSG="cooling down extruder..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET=0
RESTORE_GCODE_STATE NAME=cold_pull_state
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
CONSOLE_ECHO TITLE="Cold pull complete" MSG="Please remove the filament from the PTFE tube and cut the end off. Do NOT try to load it again." TYPE="warning"
[gcode_macro _USER_START_PRINT_BEFORE_HOMING]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_BED]
gcode =
[gcode_macro _USER_START_PRINT_BED_MESH]
gcode =
[gcode_macro _USER_START_PRINT_PARK]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
[gcode_macro _USER_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 =
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
[gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_PARK]
gcode =
[gcode_macro _USER_END_PRINT_FINISHED]
description = User hook for when the print is finished after gcode state has been restored.
gcode =
[gcode_macro _USER_START_PRINT]
gcode =
[gcode_macro _USER_END_START_PRINT]
gcode =
[gcode_macro _USER_START_FEATURE]
gcode =
[gcode_macro _USER_END_FEATURE]
gcode =
[gcode_macro _USER_BEFORE_IDLE_TIMEOUT]
gcode =
[gcode_macro _USER_AFTER_IDLE_TIMEOUT]
gcode =
[gcode_macro ECHO_T_VARS]
description = Echo Toolhead variables to the console.
gcode =
{% set t = params.T|default(0) %}
RATOS_ECHO MSG="T{t} Variables"
{% for var, value in printer["gcode_macro T%s" % t].items() %}
{action_respond_info(var ~ ": " ~ value)}
{% endfor %}
[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 ENSURE_CRITICAL_RATOS_INIT]
variable_completed = False
gcode =
{% if not completed %}
CALCULATE_PRINTABLE_AREA
SET_GCODE_VARIABLE MACRO=ENSURE_CRITICAL_RATOS_INIT VARIABLE=completed VALUE=True
{% endif %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
{action_respond_info("Initializing RatOS...")}
ENSURE_CRITICAL_RATOS_INIT
_LED_STANDBY
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
{% if printer.fastconfig.settings.beacon is defined %}
_BED_MESH_SANITY_CHECK
{% endif %}
{% set svv = printer.save_variables.variables %}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=0 C={svv.nozzle_expansion_coefficient_t0|default(0.06)|float}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=1 C={svv.nozzle_expansion_coefficient_t1|default(0.06)|float}
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=idex_applied_offset
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
ENSURE_CRITICAL_RATOS_INIT
HELLO_RATOS
_ALERT_NON_ZERO_Z_OFFSET
[gcode_macro _ALERT_NON_ZERO_Z_OFFSET]
gcode =
{% set force = params.FORCE|default(0)|int == 1 %}
{% set user_offset = printer.named_offsets.user_probe_z_offset.z|float %}
{% set gcode_offset = printer.gcode_move.homing_origin.z|float %}
{% set combined_offset = user_offset + gcode_offset %}
{% if force or user_offset != 0 or gcode_offset != 0 %}
{% set title = "User-adjusted Z-offset of %.3f mm is active" % combined_offset %}
{% set msg = "" %}
{% set nl = "" %}
{% if user_offset != 0 %}
{% set msg = msg + "beacon true zero user Z-offset: %.3f mm (to clear, use Z_OFFSET_APPLY_PROBE CLEAR=1)" % user_offset %}
{% set nl = "_N_" %}
{% endif %}
{% if gcode_offset != 0 %}
{% set msg = msg + nl + "G-code Z-offset: %.3f mm" % gcode_offset %}
{% endif %}
CONSOLE_ECHO TITLE="{title}" TYPE="info" MSG="{msg}"
{% endif %}
[gcode_macro _INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE]
gcode =
{% set variable = params.VARIABLE|string %}
{% set svv = printer.save_variables.variables %}
{% set nlu_msg = "no longer used, please remove" %}
{% if svv[variable] is defined %}
{% set v = svv[variable]|string|replace('"', '')|replace("'", "") %}
{% if not nlu_msg in v %}
SAVE_VARIABLE VARIABLE={variable} VALUE='"{nlu_msg} (was {v})"'
{% endif %}
CONSOLE_ECHO TITLE="Deprecated ratos-variables.cfg variable" TYPE="warning" MSG="The variable {variable} is no longer used, please remove it from your ratos-variables.cfg file."
{% endif %}
[gcode_macro _NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK]
gcode =
{% set t = params.T|int %}
{% set c = params.C|float %}
{% set normal_low = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_low|default(0.05)|float %}
{% set normal_high = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_high|default(0.10)|float %}
{% if c < 0 %}
{action_emergency_stop("Invalid nozzle_expansion_coefficient_t%s value in ratos-variables.cfg: %.3f. It must be non-negative." % (t, c))}
{% endif %}
{% if c >= normal_high %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite high. Please verify that this is correct."
{% endif %}
{% if c <= normal_low %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite low. Please verify that this is correct."
{% endif %}
[gcode_macro INITIAL_FRONTEND_UPDATE]
gcode =
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_error = printer["gcode_macro RatOS"].status_color_error|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_unknown}"'
{% endif %}
{% set t0_sensor = "undefined" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].filament_detected|lower == "true" %}
{% set t0_sensor = "detected" %}
{% else %}
{% set t0_sensor = "empty" %}
{% endif %}
{% else %}
{% set t0_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set t1_sensor = "undefined" %}
{% if printer["dual_carriage"] is defined and printer["filament_switch_sensor toolhead_filament_sensor_t1"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].filament_detected|lower == "true" %}
{% set t1_sensor = "detected" %}
{% else %}
{% set t1_sensor = "empty" %}
{% endif %}
{% else %}
{% set t1_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% if svv.t0_filament is defined and printer["gcode_macro T0"] is defined %}
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
{% if t0_sensor != "empty" %}
{% set t0_filament_type = svv.t0_filament[0]|default('')|string %}
{% set t0_filament_name = svv.t0_filament[1]|default('')|string %}
{% set t0_filament_temp = svv.t0_filament[2]|default(0)|float %}
{% if t0_filament_name != '' and t0_filament_type != '' and t0_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{t0_filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{t0_filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={t0_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
{% if svv.t1_filament is defined and printer["gcode_macro T1"] is defined %}
{% if printer["gcode_macro T1"].filament_name is defined and printer["gcode_macro T1"].filament_type is defined and printer["gcode_macro T1"].filament_temp is defined %}
{% if t1_sensor != "empty" %}
{% set t1_filament_type = svv.t1_filament[0]|default('')|string %}
{% set t1_filament_name = svv.t1_filament[1]|default('')|string %}
{% set t1_filament_temp = svv.t1_filament[2]|default(0)|float %}
{% if t1_filament_name != '' and t1_filament_type != '' and t1_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='"{t1_filament_name}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='"{t1_filament_type}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE={t1_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t1_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro CALCULATE_PRINTABLE_AREA]
variable_calculated = False
gcode =
{% if not calculated %}
{% set bed_margin_x = printer["gcode_macro RatOS"].bed_margin_x %}
{% set bed_margin_y = printer["gcode_macro RatOS"].bed_margin_y %}
{% set tool = 0 if printer["gcode_macro T0"] is not defined or printer["gcode_macro T0"].active else 1 %}
{% set max_x = printer.toolhead.axis_maximum.x if printer["dual_carriage"] is defined and tool == 0 else printer.toolhead.axis_maximum.x - bed_margin_x[1] %}
{% if printer["dual_carriage"] is defined %}
{% set max_x = printer.toolhead.axis_maximum.x %}
{% endif %}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="printer.toolhead.axis_maximum.x {printer.toolhead.axis_maximum.x}"
{% set max_y = printer.toolhead.axis_maximum.y - bed_margin_y[1]%}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_x_max VALUE={max_x}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_y_max VALUE={max_y}
SET_GCODE_VARIABLE MACRO=CALCULATE_PRINTABLE_AREA VARIABLE=calculated VALUE=True
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
RATOS_LOG PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
{% endif %}
[gcode_macro CACHE_TOOLHEAD_SETTINGS]
variable_cache = {"global": {"accel": 1000, "ratio": 0.5, "speed": 50, "scv": 5}}
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set dummy = cache.__setitem__(key, {"accel": printer.toolhead.max_accel, "ratio": printer.toolhead.minimum_cruise_ratio, "speed": printer.toolhead.max_velocity, "scv": printer.toolhead.square_corner_velocity}) %}
SET_GCODE_VARIABLE MACRO=CACHE_TOOLHEAD_SETTINGS VARIABLE=cache VALUE="{cache | pprint | replace("\n", "") | replace("\"", "\\\"")}"
DEBUG_ECHO PREFIX="CACHE_TOOLHEAD_SETTINGS" MSG="Toolhead settings cached for {key}. {printer.toolhead.max_accel} accel, {printer.toolhead.minimum_cruise_ratio} ratio, {printer.toolhead.max_velocity} velocity, {printer.toolhead.square_corner_velocity} scv."
[gcode_macro RESTORE_TOOLHEAD_SETTINGS]
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set values = printer["gcode_macro CACHE_TOOLHEAD_SETTINGS"].cache.__getitem__(key) %}
{% if values is not defined or values == 'None' %}
{ action_raise_error("RESTORE_TOOLHEAD_SETTINGS: Toolhead settings not cached for key '" ~ key ~ "'.") }
{% endif %}
SET_VELOCITY_LIMIT ACCEL={values.accel} MINIMUM_CRUISE_RATIO={values.ratio} VELOCITY={values.speed} SQUARE_CORNER_VELOCITY={values.scv}
DEBUG_ECHO PREFIX="RESTORE_TOOLHEAD_SETTINGS" MSG="Toolhead settings restored. {values.accel} accel, {values.ratio} ratio, {values.speed} velocity, {values.scv} scv."
[gcode_macro SET_MACRO_TRAVEL_SETTINGS]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float %}
{% set accel = printer["gcode_macro RatOS"].macro_travel_accel %}
SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0.5 VELOCITY={speed} SQUARE_CORNER_VELOCITY={5}
DEBUG_ECHO PREFIX="SET_MACRO_TRAVEL_SETTINGS" MSG="Macro travel settings set. {accel} accel, {speed} velocity"
[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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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
{% if printer["dual_carriage"] is not defined %}
SET_KINEMATIC_POSITION X={printable_x_max / 2} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
{% else %}
IDEX_SET_CENTER_KINEMATIC_POSITION
{% endif %}
[gcode_macro IDEX_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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set center_x = printable_x_max / 2 %}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x - (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x + (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
[gcode_macro VERIFY_HYBRID_INVERTED]
gcode =
{% set inverted = False %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy is defined and printer.fastconfig.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy.inverted|lower == 'true' %}
{% set inverted = True %}
{% endif %}
{% endif %}
{% if inverted == False %}
{ action_emergency_stop("ratos_hybrid_corexy NOT INVERTED! Inverted hybrid core-xy bugfix not detected.") }
{% endif %}
[gcode_macro RATOS_ECHO]
gcode =
{% set prefix = "RatOS" %}
{% set debug = params.DEBUG|default(0)|int %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " | " ~ params.PREFIX %}
{% endif %}
{% set prefix = prefix ~ ":" %}
{% set msg = "" %}
{% if params.MSG is defined %}
{% set msg = params.MSG %}
{% else %}
{% set msg = "No msg parameter provided (this is a bug or unintended use)." %}
{% endif %}
{% if not debug %}
M117 {prefix} {msg}
{% endif %}
RATOS_LOG PREFIX="{prefix}" MSG="{msg}"
{% if not debug %}
RESPOND PREFIX="{prefix}" MSG="{msg}"
{% else %}
CONSOLE_ECHO TITLE="{prefix}" TYPE="debug" MSG="{msg}"
{% endif %}
[gcode_macro ENABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=True
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=prefix_filter VALUE="'{params.FILTER|default('')|lower}'"
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging enabled."
[gcode_macro DISABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=False
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging disabled."
[gcode_macro DEBUG_ECHO]
variable_enabled = False
variable_prefix_filter = ''
gcode =
{% set prefix = "DEBUG" %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " - " ~ params.PREFIX %}
{% endif %}
{% if enabled and (prefix_filter|lower == '' or prefix_filter|lower in params.PREFIX|lower) %}
RATOS_ECHO PREFIX="{prefix}" MSG="{params.MSG}" DEBUG=1
{% endif %}
[gcode_macro START_FEATURE]
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="Start {params.FEATURE} feature gcode"
{% set scv = printer.toolhead.square_corner_velocity|int|default(5) %}
{% set accel = printer.toolhead.max_accel|int|default(10000) %}
{% set ratio = printer.toolhead.minimum_cruise_ratio|float|default(0.5) %}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="scv" VALUE={scv}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="accel" VALUE={accel}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="ratio" VALUE={ratio}
_USER_START_FEATURE FEATURE="{params.FEATURE}"
[gcode_macro END_FEATURE]
variable_scv = 5
variable_accel = 10000
variable_ratio = 0.5
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="End {params.FEATURE} feature gcode"
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={scv} ACCEL={accel} MINIMUM_CRUISE_RATIO={ratio}
_USER_END_FEATURE FEATURE="{params.FEATURE}" SCV={scv} ACCEL={accel} RATIO={ratio}
[gcode_macro _ON_LAYER_CHANGE]
variable_layer_number = 0
description = INTERNAL USE ONLY. Call it from the slicers after layer change custom gcode
gcode =
{% set layer = params.LAYER|int %}
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE={layer}
SET_PRINT_STATS_INFO CURRENT_LAYER={layer}
[gcode_macro _LEARN_MORE_CALIBRATION]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/calibration" %}
{% set link_text = "RatOS Calibration Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_CHAMBER_FILTER]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter Control" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_FILAMENT]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/filaments" %}
{% set link_text = "RatOS Filament Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _CONSOLE_SAVE_CONFIG]
gcode =
M118 Click SAVE_CONFIG to save the settings to your printer.cfg.
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.fastconfig.config["skew_correction %s" % ratos_skew_profile] is defined %}
SKEW_PROFILE LOAD={ratos_skew_profile}
GET_CURRENT_SKEW
{% else %}
{% set line_1 = '"Could not find skew profile %s!_N_Clearing skew correction."' % ratos_skew_profile %}
CONSOLE_ECHO TITLE="Missing skew profile!" TYPE="warning" MSG={line_1}
SET_SKEW CLEAR=1
{% endif %}
{% endif %}
[gcode_macro M601]
gcode =
PAUSE
[gcode_macro _STOP_AND_RAISE_ERROR]
gcode =
M84
_RAISE_ERROR MSG="{params.MSG}"
[gcode_macro PAUSE]
description = Pauses the print
rename_existing = PAUSE_BASE
variable_extrude = 1.5
variable_retract = 1.5
variable_fan_speed = 0
variable_idex_mode = ""
variable_idex_toolhead = 0
variable_idex_toolhead_x = 0.0
variable_idex_toolhead_y = 0.0
variable_idex_toolhead_z = 0.0
gcode =
RATOS_ECHO MSG="Pausing print..."
{% set runout_detected = true if params.RUNOUT|default(false)|lower == 'true' else false %}
_LED_PAUSE
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
SAVE_GCODE_STATE NAME=PAUSE_state
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_mode VALUE='"{idex_mode}"'
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead VALUE={idex_toolhead}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_x VALUE={printer.gcode_move.gcode_position.x|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_y VALUE={printer.gcode_move.gcode_position.y|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_z VALUE={printer.gcode_move.gcode_position.z|float}
DEBUG_ECHO PREFIX="PAUSE" MSG="idex_mode: {idex_mode}, idex_toolhead: {idex_toolhead}, idex_toolhead_x: {idex_toolhead_x}, idex_toolhead_y: {idex_toolhead_y}, idex_toolhead_z: {idex_toolhead_z}"
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
CACHE_TOOLHEAD_SETTINGS KEY="pause"
SET_MACRO_TRAVEL_SETTINGS
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% if current_z < (max_z - 20.0) %}
{% set z_safe = 20.0 %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
PAUSE_BASE
{% if printer["dual_carriage"] is not defined %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan"].speed|float}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
{% if idex_toolhead == 0 %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t1"].speed|float}
{% endif %}
{% endif %}
{% endif %}
M106 S0
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set R = printer["gcode_macro PAUSE"].retract|float %}
{% if can_extrude %}
G91
G1 E-{R} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].pause_print_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].pause_print_park_in %}
{% if runout_detected %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].runout_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].runout_park_in %}
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
DEBUG_ECHO PREFIX="PAUSE" MSG="z_speed: {z_speed}, pause_print_park_x: {pause_print_park_x}, pause_print_park_in: {pause_print_park_in}, default_toolhead: {default_toolhead}"
{% if "xyz" in printer.toolhead.homed_axes %}
G91
G1 Z{z_safe} F{z_speed}
G90
{% if printer["dual_carriage"] is not defined %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% else %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
_IDEX_SINGLE X={parking_position}
{% else %}
PARK_TOOLHEAD
{% endif %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% endif %}
{% else %}
{action_respond_info("Printer not homed")}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="pause"
RATOS_ECHO MSG="Print paused"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
RATOS_ECHO MSG="Resuming print..."
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set target_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set target_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if target_idex_mode != '' %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set fan_speed = printer["gcode_macro PAUSE"].fan_speed|float %}
{% if printer["dual_carriage"] is not defined %}
M106 S{(fan_speed * 255)}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% else %}
{% if params.TOOLHEAD is defined %}
{% if params.TOOLHEAD == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% else %}
{% if printer["gcode_macro PAUSE"].idex_toolhead == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% endif %}
{% endif %}
M106.1 S{fan_speed}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY DANCE=0
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR DANCE=0
{% else %}
{% if params.TOOLHEAD is defined %}
_SELECT_TOOL T={params.TOOLHEAD} X=-1 Y=-1 TOOLSHIFT=false
{% else %}
_SELECT_TOOL T={printer["gcode_macro PAUSE"].idex_toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% endif %}
{% set x = printer["gcode_macro PAUSE"].idex_toolhead_x|float %}
{% set y = printer["gcode_macro PAUSE"].idex_toolhead_y|float %}
{% set z = printer["gcode_macro PAUSE"].idex_toolhead_z|float %}
G1 X{x} Y{y} Z{z} F{speed}
{% if params.TOOLHEAD is defined %}
SAVE_GCODE_STATE NAME=PAUSE_STATE
{% endif %}
{% endif %}
{% if params.TOOLHEAD is not defined %}
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
{% if can_extrude %}
G91
G1 E{E} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 MOVE_SPEED={speed}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
RESUME_BASE
_LED_PRINTING
RATOS_ECHO MSG="Print resumed"
[gcode_macro CANCEL_PRINT]
description = Cancels the print
rename_existing = CANCEL_PRINT_BASE
gcode =
RATOS_ECHO MSG="Cancelling print..."
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
RATOS_ECHO MSG="Print cancelled"
[gcode_macro START_PRINT]
description = Start print procedure, use this in your Slicer.
variable_post_processor_version = 2
variable_is_printing_gcode = False
variable_both_toolheads = True
variable_object_xoffset = 0
variable_first_x = -1
variable_first_y = -1
variable_total_toolshifts = 0
variable_initial_tool = 0
variable_extruder_first_layer_temp = ""
variable_extruder_other_layer_temp = ""
gcode =
{% if params.EXTRUDER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_TEMP parameter not found.")}
{% endif %}
{% if params.EXTRUDER_OTHER_LAYER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_OTHER_LAYER_TEMP parameter not found.")}
{% endif %}
{% if params.BED_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. BED_TEMP parameter not found.")}
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' and printer["gcode_macro RatOS"].danger_force_allow_auto_center_subject|default(false)|lower != 'true'%}
{ action_raise_error("The experimental auto_center_subject feature is not supported in this version of RatOS. Please disable it in the RatOS macro settings.") }
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes and printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% if printer["gcode_macro _VAOC"].is_started|default(true)|lower == 'true' %}
_VAOC_END
{% endif %}
{% endif %}
_LED_START_PRINTING
CACHE_TOOLHEAD_SETTINGS KEY="start_print"
_USER_START_PRINT { rawparams }
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_probe_stowable = printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
{% set X0 = params.X0|default(-1)|float %}
{% set X1 = params.X1|default(-1)|float %}
{% set Y0 = params.Y0|default(-1)|float %}
{% set Y1 = params.Y1|default(-1)|float %}
{% if first_x == -1 or first_y == -1 %}
{% set first_x = params.FIRST_X|default(-1)|float %}
{% set first_y = params.FIRST_Y|default(-1)|float %}
{% endif %}
{% set total_toolshifts = params.TOTAL_TOOLSHIFTS|default(0)|int %}
{% set initial_tool = params.INITIAL_TOOL|default(default_toolhead)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set bed_temp = params.BED_TEMP|default(printer.heater_bed.target, true)|float %}
{% set total_layer_count = params.TOTAL_LAYER_COUNT|default(0)|int %}
{% set extruder_first_layer_temp = (params.EXTRUDER_TEMP|default("")).split(",") %}
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL BEACON_CONTACT_START_PRINT_TRUE_ZERO={beacon_contact_start_print_true_zero} BEACON_CONTACT_CALIBRATE_MODEL_ON_TRUE_ZERO={beacon_contact_calibrate_model_on_true_zero}
{% endif %}
_START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH BED_TEMP={bed_temp}
RATOS_ECHO MSG="First print coordinates X:{first_x} Y:{first_y}"
{% if params.TOTAL_LAYER_COUNT is not defined %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Configuration" %}
{% set line_1 = '"Your slicer gcode settings are not up to date._N_Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Incomplete Slicer Configuration detected" TYPE="warning" MSG={line_1}
{% endif %}
SET_PRINT_STATS_INFO CURRENT_LAYER=1
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE=1
{% if total_layer_count > 0 %}
SET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set swap_toolheads = true if printer["gcode_macro _IDEX_REMAP_TOOLHEADS"].enabled|default(false)|lower == 'true' else false %}
{% if swap_toolheads %}
{% set initial_tool = 0 if initial_tool == 1 else 1 %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=active VALUE=True
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=active VALUE=True
{% endif %}
{% set both_toolheads = true %}
{% if total_toolshifts == 0 %}
{% set both_toolheads = false %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
{% endif %}
{% if both_toolheads and (idex_mode == "copy" or idex_mode == "mirror") %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Gcode tool changes found. Copy and mirror mode do not support toolchanges.")}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set both_toolheads = true %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=initial_tool VALUE={initial_tool}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_x VALUE={first_x}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_y VALUE={first_y}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=total_toolshifts VALUE={total_toolshifts}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=both_toolheads VALUE={both_toolheads}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_first_layer_temp VALUE="'{params.EXTRUDER_TEMP}'"
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_other_layer_temp VALUE="'{params.EXTRUDER_OTHER_LAYER_TEMP}'"
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_TOOLCHANGE VARIABLE=toolshift_count VALUE=0
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set svv = printer.save_variables.variables %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
{% set stepper_x_position_min = printer.fastconfig.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.fastconfig.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.fastconfig.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.fastconfig.settings.dual_carriage.position_endstop|float %}
{% set x_parking_space = parking_position_t0 - (stepper_x_position_endstop , stepper_x_position_min)|max %}
{% set dc_parking_space = (dual_carriage_position_endstop , dual_carriage_position_max)|min - parking_position_t1 %}
{% if svv.idex_xoffset|abs >= (x_parking_space - 0.5) or svv.idex_xoffset|abs >= (dc_parking_space - 0.5) %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Toolhead x-offset is too high for the available parking space. Calibrate your X and DC endstop positions and make sure you stay below 1mm." % (copy_mode_max_width)) }
{% endif %}
{% endif %}
{% if (idex_mode == "copy" or idex_mode == "mirror") and printer.fastconfig.settings.ratos.enable_gcode_transform %}
{% if params.MIN_X is not defined or params.MAX_X is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Something went wrong! Missing important post processor start print parameter!") }
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE=0
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set boundary_box_min_x = params.MIN_X|default(0)|float %}
{% set boundary_box_max_x = params.MAX_X|default(printable_x_max)|float %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
{% set boundary_box_max_x = boundary_box_max_x + svv.idex_xoffset %}
{% else %}
{% set boundary_box_min_x = boundary_box_min_x - svv.idex_xoffset %}
{% endif %}
{% set center_x = printable_x_max / 2.0 %}
{% set safe_distance = printer.fastconfig.settings.dual_carriage.safe_distance|float %}
{% set object_width = boundary_box_max_x - boundary_box_min_x %}
{% set copy_mode_max_width = center_x %}
{% set mirror_mode_max_width = center_x - safe_distance / 2.0 %}
DEBUG_ECHO PREFIX="START_PRINT" MSG="OBJECT_WIDTH: {object_width} BOUNDARY_BOX_MIN_X: {boundary_box_min_x} BOUNDARY_BOX_MAX_X: {boundary_box_max_x} CENTER_X: {center_x} SAFE_DISTANCE: {safe_distance}"
{% if idex_mode == "copy" and object_width > copy_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for copy mode! Max supported width is %s mm" % (copy_mode_max_width)) }
{% endif %}
{% if idex_mode == "mirror" and object_width > mirror_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for mirror mode! Max supported width is %s mm" % (mirror_mode_max_width)) }
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = (printable_x_max - boundary_box_max_x - boundary_box_min_x) / 2 %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE={object_xoffset}
{% endif %}
{% endif %}
{% set has_initial_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_initial_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined and both_toolheads %}
{% set has_secondary_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_secondary_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% endif %}
_CHAMBER_FILTER_ON AT="before_print_start"
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true' %}
{% if both_toolheads %}
RATOS_ECHO MSG="Spool join is not possible if both toolheads are in use!"
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
CLEAR_PAUSE
{% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %}
G90
{% endif %}
SAVE_GCODE_STATE NAME=start_print_state
G21
G90
M82
_USER_START_PRINT_BEFORE_HOMING { rawparams }
{% if z_probe_stowable == true %}
STOWABLE_PROBE_BEGIN_BATCH
{% endif %}
MAYBE_HOME
_Z_HOP
{% if idex_mode != '' and not (printer.fastconfig.settings.beacon is defined and (beacon_contact_start_print_true_zero or beacon_adaptive_heat_soak)) %}
PARK_TOOLHEAD
{% endif %}
{% if chamber_temp > 0 %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED={printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float}
{% endif %}
{% endif %}
_CHAMBER_HEATER_ON START_CHAMBER_TEMP={start_chamber_temp} CHAMBER_TEMP={chamber_temp}
_USER_START_PRINT_HEAT_CHAMBER { rawparams } CHAMBER_TEMP={chamber_temp}
{% endif %}
_START_PRINT_BEFORE_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
RATOS_ECHO MSG="Heating bed..."
M190 S{bed_temp}
{% if printer.fastconfig.settings.beacon is defined and beacon_adaptive_heat_soak %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK LAYER_QUALITY={beacon_adaptive_heat_soak_layer_quality} MAXIMUM_FIRST_LAYER_DURATION={beacon_adaptive_heat_soak_maximum_first_layer_duration} MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={beacon_adaptive_heat_soak_max_wait}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_BED { rawparams }
_START_PRINT_AFTER_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
_USER_START_PRINT_BED_MESH { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_BED_MESH X0={X0} X1={X1} Y0={Y0} Y1={Y1} T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if z_probe_stowable == true %}
STOWABLE_PROBE_END_BATCH
{% endif %}
{% if idex_mode == '' %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[initial_tool]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[0]|float}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={extruder_first_layer_temp[1]|float}
{% endif %}
{% endif %}
_USER_START_PRINT_PARK { rawparams }
_START_PRINT_PARK
RATOS_ECHO MSG="Heating Extruder..."
{% if idex_mode == '' %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[initial_tool]|float} MAXIMUM={extruder_first_layer_temp[initial_tool]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder1" MINIMUM={extruder_first_layer_temp[1]|float} MAXIMUM={extruder_first_layer_temp[1]|float + 5}
{% endif %}
{% endif %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% if idex_mode == '' %}
_LED_PRINTING
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
_LED_PRINTING
{% else %}
{% if both_toolheads %}
_LED_PRINTING TOOLHEAD={initial_tool}
{% if toolchange_standby_temp > -1 %}
_LED_TOOLHEAD_STANDBY TOOLHEAD={0 if initial_tool == 1 else 1}
{% else %}
_LED_PRINTING TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% else %}
_LED_PRINTING TOOLHEAD={initial_tool}
_LED_DEACTIVATE_TOOLHEAD TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_EXTRUDER { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_AFTER_HEATING_EXTRUDER X0={X0} X1={X1} Y0={Y0} Y1={Y1} INITIAL_TOOLHEAD={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if idex_mode != '' %}
{% if not both_toolheads %}
{% if initial_tool != default_toolhead %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=standby VALUE=False
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=standby VALUE=False
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if toolchange_standby_temp > -1 %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if initial_tool == 1 else 'extruder1'} TARGET={toolchange_standby_temp}
SET_GCODE_VARIABLE MACRO=T{0 if initial_tool == 1 else 1} VARIABLE=standby VALUE=True
{% endif %}
{% endif %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if printer["dual_carriage"] is defined %}
_SET_IDEX_MODE_OFFSET
{% endif %}
{% if idex_mode != '' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% if idex_mode == "copy" and idex_mode != act_idex_mode %}
_IDEX_COPY DANCE=0
{% elif idex_mode == "mirror" and idex_mode != act_idex_mode %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
RATOS_ECHO MSG="Adjusting object x-offset by {(object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={object_xoffset} MOVE=0
{% endif %}
{% else %}
_SELECT_TOOL T={initial_tool} TOOLSHIFT=false
_SET_TOOLHEAD_OFFSET
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
_SET_EXTRUSION_MODE
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
SET_GCODE_VARIABLE MACRO=_SELECT_TOOL VARIABLE=last_timestamp VALUE={printer["print_stats"].print_duration}
{% endif %}
_USER_END_START_PRINT { rawparams }
G92 E0
_CHAMBER_FILTER_ON AT="after_print_start"
_ALERT_NON_ZERO_Z_OFFSET
RATOS_ECHO MSG="Printing..."
[gcode_macro _START_PRINT_BEFORE_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% set act_t = 1 if idex_mode == 'primary' else 0 %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set is_stowable_probe = true if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' else false %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Pre-heating extruder..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={min_temp}
{% else %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET={min_temp}
{% endif %}
{% else %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
{% endif %}
{% endif %}
{% if not is_stowable_probe %}
{% if printer["dual_carriage"] is defined and act_t != default_toolhead %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
{% endif %}
RATOS_ECHO MSG="Heat soaking z probe..."
_MOVE_TO_SAFE_Z_HOME
G0 Z2 F{z_speed}
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Waiting for extruder to be preheated..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
{% if default_toolhead == 0 %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_Z_HOP
{% endif %}
{% if auto_z_offset_calibration %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
PARK_TOOLHEAD
_CLEANING_MOVE TOOLHEAD={default_toolhead} AUTOMATED=True
_SELECT_TOOL T={0 if default_toolhead == 1 else 1} X={parking_position_t0 if default_toolhead == 1 else parking_position_t1} Y=0 TOOLSHIFT=false
_CLEANING_MOVE TOOLHEAD={0 if default_toolhead == 1 else 1} AUTOMATED=True
_VAOC_CALIBRATE_Z_OFFSET AUTO_Z_OFFSET=True
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=false
{% endif %}
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
{% if needs_rehoming %}
G28 Z
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% endif %}
{% endif %}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
PROBE PROBE_METHOD=contact SAMPLES=1
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% set fuzzy_radius = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_radius|default(0)|float if beacon_contact_start_print_true_zero_fuzzy_position else 0 %}
{% set contact_true_zero_temp_has_been_set = False %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
{% if printer.beacon.last_probe_result|lower == "ok" %}
{% set last_z_offset = printer.beacon.last_z_result %}
RATOS_ECHO MSG="Auto calibration nozzle wipe with probe result {last_z_offset}..."
G0 Z{(0.2 + last_z_offset)} F{z_speed}
G0 X70 F300
{% else %}
RATOS_ECHO MSG="Skipping auto calibration nozzle wipe because probing failed!"
{% endif %}
{% elif beacon_contact_wipe_before_true_zero_method == "probe_clean" %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% set contact_true_zero_temp_has_been_set = True %}
BEACON_PROBE_CLEAN X=50 Y=10
{% else %}
CONSOLE_ECHO TYPE="error" TITLE="Unknown wipe method" MSG="Unknown wipe method '{beacon_contact_wipe_before_true_zero_method}' configured, skipping wipe before beacon true zero."
{% endif %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME FUZZY_RADIUS={fuzzy_radius}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION
{% if not contact_true_zero_temp_has_been_set %}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% endif %}
RATOS_ECHO MSG="Beacon contact auto calibration..."
{% if beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
G0 Z5 F{z_speed}
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION]
gcode =
{% set pos = printer.ratos.last_move_to_safe_z_home_position %}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE={pos[0]}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE={pos[1]}
[gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set first_x = printer["gcode_macro START_PRINT"].first_x|default(-1)|float %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set center_x = printable_x_max / 2.0 %}
{% set center_y = printable_y_max / 2.0 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% if printer["dual_carriage"] is defined %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% endif %}
{% set X0 = params.X0|default(-1)|int %}
{% set X1 = params.X1|default(-1)|int %}
{% set Y0 = params.Y0|default(-1)|int %}
{% set Y1 = params.Y1|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% if idex_mode == '' %}
_PRIME
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
RATOS_ECHO PREFIX="IDEX" MSG="using combined prime offset for IDEX {idex_mode} mode"
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
{% if both_toolheads %}
{% if initial_toolhead == 0 %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T{initial_toolhead}"
_SELECT_TOOL T={initial_toolhead} TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% endif %}
{% endif %}
CACHE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
SET_MACRO_TRAVEL_SETTINGS
{% if (X0 > -1 and Y1 > -1) or (first_x > 0 and first_y > 0) %}
{% if printer["dual_carriage"] is defined %}
{% set acceleration = printer["gcode_macro RatOS"].toolchange_travel_accel %}
{% set max_accel = printer.toolhead.max_accel|float %}
{% set square_corner_velocity = printer.toolhead.square_corner_velocity|float %}
SET_VELOCITY_LIMIT ACCEL={acceleration} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY=20
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
{% set first_z = 1 %}
{% else %}
{% set first_z = 3 %}
{% endif %}
{% if idex_mode == "mirror" %}
{% if first_y >= 0 %}
G0 Y{first_y} F{speed}
{% else %}
G0 Y{Y1} F{speed}
{% endif %}
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
_MOVE_TO_LOADING_POSITION TOOLHEAD={initial_toolhead} AUTOMATED=True
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead} AUTOMATED=True
{% endif %}
{% if first_x >= 0 and first_y >= 0 %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% else %}
{% set first_x = X0 %}
{% set first_y = Y0 %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %}
{% set first_x = X0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %}
{% set first_x = X1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|float <= center_x %}
{% set first_x = X0 %}
{% else %}
{% set first_x = X1 %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %}
{% set first_y = Y0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %}
{% set first_y = Y1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float <= center_y %}
{% set first_y = Y0 %}
{% else %}
{% set first_y = Y1 %}
{% endif %}
{% endif %}
{% endif %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% endif %}
{% endif %}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
_LOAD_RATOS_SKEW_PROFILE
[gcode_macro _PRIME]
gcode =
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
PRIME_BLOB INITIAL_TOOLHEAD={params.INITIAL_TOOLHEAD} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={params.IDEX_MODE} Y1={params.Y1}
{% else %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE == "copy" %}
_IDEX_COPY DANCE=0
{% elif params.IDEX_MODE == "mirror" %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro END_PRINT]
description = End print procedure, use this in your Slicer.
gcode =
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SAVE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = printer["gcode_macro START_PRINT"].object_xoffset|default(0)|float %}
RATOS_ECHO MSG="Adjusting object x-offset by {(0-object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={(0-object_xoffset)}
{% endif %}
{% endif %}
_USER_END_PRINT_BEFORE_HEATERS_OFF { rawparams }
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_USER_END_PRINT_AFTER_HEATERS_OFF { rawparams }
_END_PRINT_AFTER_HEATERS_OFF
_USER_END_PRINT_PARK { rawparams }
_END_PRINT_PARK
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
{% if printer["dual_carriage"] is not defined and printer["gcode_macro RatOS"].end_print_motors_off|lower != 'false' %}
M84
{% endif %}
M107
BED_MESH_CLEAR
RATOS_ECHO MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
M84
{% endif %}
RESET_NAMED_OFFSET EVENT="end_print"
RESTORE_TOOLHEAD_SETTINGS KEY="start_print"
_CHAMBER_FILTER_ON AT="print_end"
_CHAMBER_FILTER_OFF
_CHAMBER_HEATER_OFF
_USER_END_PRINT_FINISHED { rawparams }
[gcode_macro _END_PRINT_BEFORE_HEATERS_OFF]
gcode =
RATOS_ECHO MSG="Cleaning up..."
[gcode_macro _END_PRINT_AFTER_HEATERS_OFF]
gcode =
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %}
{% set r = printer["gcode_macro RatOS"].end_print_retract_filament|default(4)|float %}
{% if current_z < (max_z - z_hop) %}
{% set z_safe = z_hop %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
G91
{% if can_extrude %}
G1 E-2 F3600
{% endif %}
G0 Z{z_safe} F3600
{% if can_extrude %}
G1 E-{(r-2)} F3600
{% endif %}
G90
[gcode_macro _SET_EXTRUSION_MODE]
gcode =
{% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %}
M83
{% else %}
M82
{% endif %}
[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 =
CACHE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set axis = params.AXIS|default('')|lower %}
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
{% if axis != '' %}
{% if axis == 'x' %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
{% elif axis == 'y' %}
MAYBE_HOME
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% else %}
{action_raise_error("Unknown axis specified. Expected X or Y.")}
{% endif %}
{% else %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% endif %}
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Shaper graph"
[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_macro MEASURE_COREXY_BELT_TENSION]
description = Generates resonance graph used to ensure belts are equally tensioned.
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
MAYBE_HOME
TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_belt_tension_graph
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Belt Tension Graph"
[gcode_shell_command generate_belt_tension_graph]
command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh
timeout = 90.
verbose = True
[idle_timeout]
gcode =
{% if printer.webhooks.state|lower == 'ready' %}
{% if printer.pause_resume.is_paused|lower == 'false' %}
_USER_BEFORE_IDLE_TIMEOUT
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
_USER_AFTER_IDLE_TIMEOUT
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[named_offsets]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[bed_mesh]
split_delta_z = 0.01
speed = 300
horizontal_move_z = 10
mesh_min = 20,30
mesh_max = 310,310
fade_start = 0.6
fade_end = 10.0
probe_count = 5,5
algorithm = bicubic
log_points = False
[fastconfig]
[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.103
control = pid
pid_kp = 42.817
pid_ki = 1.353
pid_kd = 338.788
[fan]
pin = !PA8
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PB4
fan_speed = 1
heater = extruder
shutdown_speed = 1
[controller_fan controller_fan]
pin = PD12
[printer]
kinematics = corexy
max_velocity = 300
max_accel = 3000
max_z_velocity = 20
max_z_accel = 350
square_corner_velocity = 5
minimum_cruise_ratio = 0.5
[gcode_macro QUAD_GANTRY_LEVEL]
rename_existing = QUAD_GANTRY_LEVEL_ORIG
gcode =
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
QUAD_GANTRY_LEVEL_ORIG
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 330
position_endstop = 330
step_pin = PF13
dir_pin = !x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PA2
position_min = 0
[stepper_y]
position_max = 350
position_endstop = 350
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
position_min = 0
[stepper_z]
position_max = 310
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
position_min = -5
homing_speed = 10
gear_ratio = 80:16
endstop_pin = probe:z_virtual_endstop
[quad_gantry_level]
gantry_corners =
-60,-10
410,420
points =
50,25
50,275
300,275
300,25
speed = 300
horizontal_move_z = 10
retries = 5
retry_tolerance = 0.0075
max_adjust = 10
[gcode_macro G32]
gcode =
SAVE_GCODE_STATE NAME=STATE_G32
G90
G28
QUAD_GANTRY_LEVEL
G28
G0 X175 Y175 Z30 F3600
RESTORE_GCODE_STATE NAME=STATE_G32
[extruder]
rotation_distance = 8
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB0
sensor_type = Generic 3950
sensor_pin = toolboard_t0:PA1
min_extrude_temp = 170
min_temp = 0
max_temp = 285
pressure_advance = 0.03
step_pin = toolboard_t0:PD3
dir_pin = !toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PB6
microsteps = 64
full_steps_per_rotation = 200
control = pid
pid_kp = 22.176
pid_ki = 2.843
pid_kd = 43.244
[firmware_retraction]
retract_speed = 40
unretract_extra_length = 0
unretract_speed = 40
retract_length = 0.5
[resonance_tester]
accel_chip_x = beacon
accel_chip_y = beacon
probe_points =
175,175,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 0.8
sense_resistor = 0.11
[stepper_z1]
step_pin = PE2
dir_pin = !z1_dir_pin
enable_pin = !PD4
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 0.8
sense_resistor = 0.11
[stepper_z2]
step_pin = PE6
dir_pin = !z2_dir_pin
enable_pin = !PE0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z3]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 0.8
sense_resistor = 0.11
[stepper_z3]
step_pin = PF9
dir_pin = !z3_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PB3
run_current = 0.707
driver_tbl = 0
driver_toff = 4
driver_hend = 6
driver_hstrt = 7
sense_resistor = 0.11
[beacon]
serial = /dev/beacon
x_offset = 0
y_offset = 22.5
mesh_main_direction = x
mesh_runs = 1
mesh_cluster_size = 0
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[beacon_user_z_offset]
[beacon_mesh]
[beacon_true_zero_correction]
[beacon_adaptive_heat_soak]
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
ENSURE_CRITICAL_RATOS_INIT
_BEACON_MESH_INIT
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_applied_offset
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=beacon_saved_runtime_offset
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_contact_expansion_multiplier is no longer used, please remove it from your config file."
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_scan_compensation_resolution is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_scan_compensation_resolution is no longer used, please remove it from your config file."
{% endif %}
[gcode_macro BEACON_RATOS_CALIBRATION]
gcode =
RATOS_ECHO MSG="Did you mean BEACON_RATOS_CALIBRATE?"
[gcode_macro BEACON_RATOS_CALIBRATE]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
BEACON_INITIAL_CALIBRATION _AUTOMATED=True
{% if beacon_contact_start_print_true_zero %}
BEACON_POKE_TEST _AUTOMATED=True
_BEACON_CHECK_POKE
{% if printer["dual_carriage"] is not defined %}
BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET _AUTOMATED=True
{% endif %}
{% endif %}
{% set already_heated = False %}
{% if beacon_contact_start_print_true_zero and beacon_scan_compensation_enable %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% set already_heated = True %}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True _AUTOMATED_ALREADY_HEATED={already_heated} BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if beacon_contact_start_print_true_zero %}
{% if printer["dual_carriage"] is not defined %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
_BEACON_ECHO_POKE
{% endif %}
RATOS_ECHO MSG="Beacon calibration finished!"
_LED_BEACON_CALIBRATION_END
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
[gcode_macro BEACON_INITIAL_CALIBRATION]
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
_Z_HOP
RATOS_ECHO MSG="Initial beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro BEACON_FINAL_CALIBRATION]
description = Runs BEACON_AUTO_CALIBRATE after heating the bed and chamber to specified temperatures. This creates a beacon model under reference conditions for future use.
This macro will skip calibration if both the beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero settings are enabled, because a new
model will be calibrated automatically at the start of each print. Use FORCE=True to override this check.
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set already_heated = true if params._AUTOMATED_ALREADY_HEATED|default(false)|lower == 'true' else false %}
{% set force = params.FORCE|default('false')|lower in ('1', 'true', 'yes') %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default('false')|lower == "true" %}
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero and not force %}
RATOS_ECHO MSG="BEACON_FINAL_CALIBRATION skipped, not needed because beacon_contact_calibrate_model_on_true_zero is enabled. Use FORCE=True to override."
{% else %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not already_heated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
{% if not already_heated %}
G0 Z2.5 F{z_hop_speed}
RATOS_ECHO MSG="Waiting for calibration temperature..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,3600]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% endif %}
_Z_HOP
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
_Z_HOP
RATOS_ECHO MSG="Final beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro BEACON_POKE_TEST]
variable_poke_result_1 = -1
variable_poke_result_2 = -1
variable_poke_result_3 = -1
variable_poke_result_4 = -1
variable_poke_result_5 = -1
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_1 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_2 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_3 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_4 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_5 VALUE=-1
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
G0 Z5 F{z_hop_speed}
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=1
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=2
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=3
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=4
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=5
_Z_HOP
RATOS_ECHO MSG="Beacon poke test finished!"
{% if not automated %}
_BEACON_ECHO_POKE
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_POKE]
gcode =
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
BEACON_POKE speed=3 top=5 bottom={poke_bottom}
BEACON_QUERY
[gcode_macro _BEACON_STORE_POKE]
gcode =
{% set i = params.I|default(1)|int %}
{% set last_z = printer.beacon.last_poke_result|default(0)|float %}
{% if printer.beacon.last_poke_result|lower != "none" %}
{% if printer.beacon.last_poke_result.error == 0 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE={"poke_result_%s" % i} VALUE={printer.beacon.last_poke_result.latency}
{% endif %}
{% endif %}
[gcode_macro _BEACON_CHECK_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% if p1 == -1 or p2 == -1 or p3 == -1 or p4 == -1 or p5 == -1 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test error!") }
{% endif %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg > 6 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test failed!") }
{% endif %}
[gcode_macro _BEACON_ECHO_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg <= 1 %}
{% set type = "success" %}
{% set note = "Extremely low noise, rarely achieved" %}
{% elif avg > 1 and avg <= 4 %}
{% set type = "info" %}
{% set note = "Excellent performance for a typical printer" %}
{% elif avg > 4 and avg <= 8 %}
{% set type = "warning" %}
{% set note = "Acceptable performance, machine may have considerable cyclic axis noise" %}
{% elif avg > 8 and avg <= 11 %}
{% set type = "alert" %}
{% set note = "Not ideal, may want to verify proper mounting or use thinner stackups" %}
{% elif avg > 11 %}
{% set type = "alert" %}
{% set note = "Reason for concern, present setup may be risky to continue with" %}
{% endif %}
CONSOLE_ECHO TITLE="Beacon poke test result:" TYPE={type} MSG={'"Average latency: %.2f_N_%s"' % (avg, note)}
[gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET]
variable_reference_z = 0.0
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Nozzle temperature offset calibration..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET=0
{% if not automated %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set svv = printer.save_variables.variables %}
RATOS_ECHO PREFIX="BEACON" MSG="Waiting for nozzle to reach {temp}°C..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={temp} MAXIMUM={temp + 2}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
RATOS_ECHO PREFIX="BEACON" MSG="Probing with nozzle temperature {temp}°C..."
PROBE PROBE_METHOD=contact PROBE_SPEED=3 LIFT_SPEED=15 SAMPLES=5 SAMPLE_RETRACT_DIST=3 SAMPLES_TOLERANCE=0.005 SAMPLES_TOLERANCE_RETRIES=10 SAMPLES_RESULT=median
BEACON_QUERY
G0 Z5 F{z_speed}
[gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% set last_z = printer.beacon.last_z_result|default(0)|float %}
{% if temp == 150 %}
SET_GCODE_VARIABLE MACRO=BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET"].reference_z|default(0)|float %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_t{default_toolhead} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS]
gcode =
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
CONSOLE_ECHO TYPE="info" MSG={'"T0 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t0}
{% else %}
CONSOLE_ECHO TYPE="info" MSG={'"T1 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t1}
{% endif %}
[gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET]
description = "Set the thermal expansion z offset for the active toolhead based on the current extruder target temperature and thermal expansion coefficient."
gcode =
{% if params.RESET is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The RESET parameter is no longer supported and has no effect."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% if params.TOOLHEAD is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The TOOLHEAD parameter is no longer supported and has no effect. The macro now automatically determines the current toolhead."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% set beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_expansion_compensation %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set toolhead = default_toolhead %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if current_idex_mode=='primary' else default_toolhead %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_t0 = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if printer["dual_carriage"] is defined %}
{% set nozzle_expansion_coefficient_t1 = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_delta = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = temp_delta * (expansion_coefficient / 100) %}
SET_NAMED_OFFSET NAME=hotend_thermal_expansion Z={expansion_offset} MOVE=1 MOVE_SPEED={z_speed}
RATOS_ECHO PREFIX="BEACON" MSG={'"Nozzle expansion offset of %.6fmm applied to T%s"' % (expansion_offset, toolhead)}
DEBUG_ECHO PREFIX="_BEACON_SET_NOZZLE_TEMP_OFFSET" MSG="toolhead: {toolhead}, coefficient: {expansion_coefficient|round(6)}, temp_delta: {temp_delta|round(1)}, expansion_offset: {expansion_offset|round(6)}"
{% endif %}
[gcode_macro BEACON_MEASURE_BEACON_OFFSET]
variable_needs_compensation = False
variable_reference_z = 0.0
variable_front = 0.0
variable_front_left = 0.0
variable_front_right = 0.0
variable_back = 0.0
variable_back_left = 0.0
variable_back_right = 0.0
variable_right = 0.0
variable_left = 0.0
variable_margin_x = 40
variable_margin_y = 40
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure beacon offset..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_BEACON_OFFSET
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_STORE_BEACON_OFFSET]
gcode =
{% set location = params.LOCATION|lower %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_BEACON_OFFSET]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].left|default(0)|float * 1000 %}
{% set line_1 = "Front left: %.6fμm" % (front_left) %}
{% set line_2 = "Front center: %.6fμm" % (front) %}
{% set line_3 = "Front right: %.6fμm" % (front_right) %}
{% set line_4 = "Left center: %.6fμm" % (left) %}
{% set line_5 = "Right center: %.6fμm" % (right) %}
{% set line_6 = "Back left: %.6fμm" % (back_left) %}
{% set line_7 = "Back center: %.6fμm" % (back) %}
{% set line_8 = "Back right: %.6fμm" % (back_right) %}
{% set max_value = [(front_left|abs), (front|abs), (front_right|abs), (left|abs), (right|abs), (back_left|abs), (back|abs), (back_right|abs)]|max %}
{% if max_value <= 50 %}
{% set type = "success" %}
{% set recommendation = "Very low beacon offset: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low beacon offset: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High beacon offset: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High beacon offset: %.6fμm._N_You will encounter first layer problems on large prints unless you activate beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high beacon offset: %.6fμm._N_You have significant scan/contact inconsistency which is indicative of mechanical problems, please investigate before resorting to software compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Beacon offset relative to the center" TYPE={type} MSG={'"_N_%s_N__N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s"' % (recommendation, line_1, line_2, line_3, line_4, line_5, line_6, line_7, line_8)}
[gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set profile = params.PROFILE|default("auto")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set keep_temp_meshes = params.KEEP_TEMP_MESHES|default(0) %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' %}
{% set desired_spacing = printer["gcode_macro RatOS"].beacon_scan_compensation_desired_spacing|float %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
RATOS_ECHO MSG="Please wait..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,9000]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if not (beacon_adaptive_heat_soak or bed_heat_soak_time > 0) %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if printer.z_tilt is defined %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% endif %}
{% if printer.quad_gantry_level is defined %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% endif %}
_BEACON_CREATE_SCAN_COMPENSATION_MESH_CORE PROFILE="{profile}" DESIRED_SPACING={desired_spacing} CHAMBER_TEMP={chamber_temp} KEEP_TEMP_MESHES={keep_temp_meshes}
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if automated %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
RATOS_ECHO MSG="Beacon scan compensation mesh created!"
{% if not automated %}
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
{% endif %}
{% endif %}
[gcode_macro _BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED" MSG="beacon_scan_compensation_profile {beacon_scan_compensation_profile}, beacon_scan_compensation_enable {beacon_scan_compensation_enable}"
{% if beacon_scan_compensation_enable %}
BEACON_APPLY_SCAN_COMPENSATION PROFILE="{beacon_scan_compensation_profile}"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL]
gcode =
{% set beacon_contact_start_print_true_zero = params.BEACON_CONTACT_START_PRINT_TRUE_ZERO|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = params.beacon_contact_calibrate_model_on_true_zero|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and not printer.beacon.model %}
{% set beacon_model_required_for_true_zero = beacon_contact_start_print_true_zero and not beacon_contact_calibrate_model_on_true_zero %}
{% set beacon_model_required_for_homing =
printer.fastconfig.settings.stepper_z.endstop_pin == 'probe:z_virtual_endstop'
and (( printer.fastconfig.settings.beacon.home_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower != 'true')
or ( printer.fastconfig.settings.beacon.default_probe_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower != 'true' )) %}
{% if beacon_model_required_for_homing or beacon_model_required_for_true_zero %}
_LED_START_PRINTING_ERROR
{ action_raise_error("An active Beacon model is required. Have you performed initial Beacon calibration?") }
{% endif %}
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set bed_temp_mismatch_is_error = true if printer["gcode_macro RatOS"].beacon_scan_compensation_bed_temp_mismatch_is_error|default(false)|lower == 'true' else false %}
{% set bed_temp = params.BED_TEMP|default(0)|float %}
{% if bed_temp == 0 %}
{% set bed_temp = printer.heater_bed.temperature %}
{% endif %}
DEBUG_ECHO PREFIX="_START_PRINT_PREFLIGHT_CHECK_BEACON" MSG="beacon_scan_compensation_profile={beacon_scan_compensation_profile}, beacon_scan_compensation_enable={beacon_scan_compensation_enable}, bed_temp={bed_temp}"
{% if beacon_scan_compensation_enable %}
_VALIDATE_COMPENSATION_MESH_PROFILE PROFILE="{beacon_scan_compensation_profile}" TITLE="Check Beacon scan compensation profile" SUBJECT="Configured compensation profile '{beacon_scan_compensation_profile}'" COMPARE_BED_TEMP={bed_temp} COMPARE_BED_TEMP_IS_ERROR={bed_temp_mismatch_is_error}
{% endif %}
[gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set needs_scan_compensation = true if printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].needs_compensation|default(false)|lower == 'true' else false %}
{% if needs_scan_compensation %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% endif %}
[gcode_macro _BEACON_HOME_AND_ABL]
gcode =
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% if needs_rehoming %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
[gcode_macro SAVE_Z_OFFSET]
description = Deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead, or in Mainsail use the SAVE button in the Z-OFFSET section.
gcode =
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default('false')|lower == 'true' %}
{% set msg = "SAVE_Z_OFFSET is deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead,_N_or in Mainsail use the SAVE button in the Z-OFFSET section."%}
{% if not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% set msg = msg + "_N_You must then use the SAVE_CONFIG command to persist the change." %}
{% endif %}
CONSOLE_ECHO TYPE="error" MSG="{msg}"
[gcode_macro _BEACON_OFFSET_COMPARE]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE SAMPLES_DROP=1 SAMPLES=3
BEACON_QUERY
[gcode_macro T0]
variable_join = 0
variable_remap = 0
variable_alert = ""
variable_filament_name = ""
variable_filament_type = ""
variable_filament_temp = 0
variable_runout_sensor = ""
variable_active = True
variable_color = "7bff33"
variable_hotend_type = "HF"
variable_has_cht_nozzle = False
variable_cooling_position_to_nozzle_distance = 40
variable_tooolhead_sensor_to_extruder_gear_distance = 15
variable_extruder_gear_to_cooling_position_distance = 30
variable_filament_loading_nozzle_offset = -5
variable_filament_grabbing_length = 5
variable_filament_grabbing_speed = 1
variable_enable_insert_detection = True
variable_enable_runout_detection = True
variable_enable_clog_detection = True
variable_unload_after_runout = True
variable_purge_after_load = 0
variable_purge_before_unload = 0
variable_extruder_load_speed = 60
variable_filament_load_speed = 10
variable_standby = False
variable_temperature_offset = 0
variable_has_oozeguard = False
variable_has_front_arm_nozzle_wiper = False
variable_toolhead_sensor_button_only_when_sensor_enabled = False
variable_toolhead_detect_clog_only_when_sensor_enabled = True
variable_resume_after_insert = False
gcode =
{% set x = params.X|default(-1.0)|float %}
{% set y = params.Y|default(-1.0)|float %}
{% set z = params.Z|default(0.0)|float %}
{% set s = params.S|default(1)|int %}
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
_SELECT_TOOL T=0 X={x} Y={y} Z={z} TOOLSHIFT={s}
{% endif %}
[save_variables]
filename = /home/pi/printer_data/config/ratos-variables.cfg
=======================
Extruder max_extrude_ratio=0.266081
mcu 'mcu': Starting serial connect
webhooks client 3932121120: New connection
webhooks client 3932121120: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c3_PA8_PC9=PA8,PC9 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_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 BUS_PINS_spi5=PF8,PF9,PF7 BUS_PINS_spi5a=PH7,PF11,PH6 BUS_PINS_spi6=PG12,PG14,PG13 CLOCK_FREQ=400000000 MCU=stm32h723xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu 'rpi': Starting connect
Loaded MCU 'rpi' 119 commands (?-20240727_132503-fv-az659-741 / gcc: (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110 binutils: (GNU Binutils for Raspbian) 2.35.2)
MCU 'rpi' config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256
mcu 'toolboard_t0': Starting serial connect
Loaded MCU 'toolboard_t0' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'toolboard_t0' config: ADC_MAX=4095 BUS_PINS_i2c1_PA9_PA10=PA9,PA10 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c2_PB13_PB14=PB13,PB14 BUS_PINS_i2c3_PB3_PB4=PB3,PB4 BUS_PINS_i2c3_PC0_PC1=PC0,PC1 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2_PB2_PB11_PB10=PB2,PB11,PB10 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=64000000 MCU=stm32g0b1xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PF0,PF1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu_temperature 'mcu' nominal base=-274.761905 slope=1625.000000
mcu_temperature 'toolboard_t0' nominal base=-273.206997 slope=1313.265306
mcu 'beacon': Starting serial connect
Loaded MCU 'beacon' 45 commands (Beacon 2.1.0 / )
MCU 'beacon' config: ADC_MAX=4095 BEACON_ACCEL_BITS=12 BEACON_ACCEL_SCALE_16G=7.81 BEACON_ACCEL_SCALE_2G=0.98 BEACON_ACCEL_SCALE_4G=1.95 BEACON_ACCEL_SCALE_8G=3.91 BEACON_ADC_SMOOTH_COUNT=16 BEACON_HAS_ACCEL=1 BEACON_REV=H CLOCK_FREQ=32000000 MCU=beacon STATS_SUMSQ_BASE=256
Sending MCU 'mcu' printer configuration...
Configured MCU 'mcu' (1024 moves)
Sending MCU 'rpi' printer configuration...
Configured MCU 'rpi' (1024 moves)
Sending MCU 'toolboard_t0' printer configuration...
Configured MCU 'toolboard_t0' (1024 moves)
Starting heater checks for heater_bed
beacon: loaded fnorm=5097771.25 temp=19.76 amfg=0.960 from nvm
beacon: built tempco model version 1 {'amfg': 0.9600737096063234, 'tcc': -6.477678986652925e-06, 'tcfl': -0.0006437466059114605, 'tctl': 0.0019760718274445636, 'fmin': 5097771.253436804, 'fmin_temp': 19.758686065673828}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
beacon_user_z_offset: beacon_contact_start_print_true_zero is enabled, activating beacon user z-offset management. Applying configured z_offset of 0.0 mm to named offset 'user_probe_z_offset'.
Starting heater checks for extruder
Stats 32.9: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3480 bytes_read=7216 bytes_retransmit=9 bytes_invalid=0 send_seq=288 receive_seq=288 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400020933 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=846 bytes_read=4720 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999884 adj=49992580 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1416 bytes_read=4974 bytes_retransmit=9 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64001330 adj=63997324 Octopus_Pro_H723_V1.1: temp=0.0 EBB42_Gen2_v1.0: temp=0.0 raspberry_pi: temp=48.7 heater_bed: target=0 temp=0.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=360 bytes_read=2049 bytes_retransmit=0 bytes_invalid=0 send_seq=60 receive_seq=60 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000072 adj=31996992 coil_temp=21.2 refs=0 mcu_temp=22.94 supply_voltage=2.994 sysload=1.65 cputime=8.559 memavail=3298308 print_time=44.183 buffer_time=0.249 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000
Initializing RatOS...
CALCULATE_PRINTABLE_AREA: Printable area calculated: X: 0,330.0 Y: 0,350.0
webhooks: registering remote method 'shutdown_machine' for connection id: 3932121120
webhooks: registering remote method 'reboot_machine' for connection id: 3932121120
webhooks: registering remote method 'pause_job_queue' for connection id: 3932121120
webhooks: registering remote method 'start_job_queue' for connection id: 3932121120
Stats 33.9: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3486 bytes_read=7319 bytes_retransmit=9 bytes_invalid=0 send_seq=289 receive_seq=289 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400018160 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=852 bytes_read=4736 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999379 adj=50000582 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1422 bytes_read=5092 bytes_retransmit=9 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000516 adj=63998485 Octopus_Pro_H723_V1.1: temp=30.5 EBB42_Gen2_v1.0: temp=27.9 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=366 bytes_read=2405 bytes_retransmit=0 bytes_invalid=0 send_seq=61 receive_seq=61 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999789 adj=31998902 coil_temp=21.2 refs=0 mcu_temp=22.96 supply_voltage=2.994 sysload=1.65 cputime=8.635 memavail=3290868 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
HELLO_RATOS: version: v2.1.0-RC4-5-g9b7d2ad3, distro: RatOS v2.1.0-RC4 (bullseye)
No deferred RatOS console messages to write.
ratos: Current CPU governor(s): performance
Stats 39.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3498 bytes_read=7931 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016228 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=864 bytes_read=4795 bytes_retransmit=0 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999660 adj=50000161 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1434 bytes_read=5689 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000313 adj=63997876 Octopus_Pro_H723_V1.1: temp=30.6 EBB42_Gen2_v1.0: temp=28.1 raspberry_pi: temp=47.2 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=4325 bytes_retransmit=0 bytes_invalid=0 send_seq=63 receive_seq=63 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000199 adj=31998805 coil_temp=21.2 refs=0 mcu_temp=23.04 supply_voltage=2.994 sysload=1.68 cputime=8.734 memavail=3298056 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 40.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3504 bytes_read=8034 bytes_retransmit=9 bytes_invalid=0 send_seq=292 receive_seq=292 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015883 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=870 bytes_read=4811 bytes_retransmit=0 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999682 adj=49997622 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1440 bytes_read=5792 bytes_retransmit=9 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000664 adj=63997908 Octopus_Pro_H723_V1.1: temp=30.7 EBB42_Gen2_v1.0: temp=28.2 raspberry_pi: temp=47.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=4681 bytes_retransmit=0 bytes_invalid=0 send_seq=64 receive_seq=64 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000115 adj=31999879 coil_temp=21.2 refs=0 mcu_temp=23.04 supply_voltage=2.994 sysload=1.55 cputime=8.752 memavail=3296168 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 41.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3510 bytes_read=8137 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015726 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=876 bytes_read=4827 bytes_retransmit=0 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999705 adj=49997857 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1446 bytes_read=5924 bytes_retransmit=9 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000502 adj=63999226 Octopus_Pro_H723_V1.1: temp=30.7 EBB42_Gen2_v1.0: temp=28.1 raspberry_pi: temp=47.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=5037 bytes_retransmit=0 bytes_invalid=0 send_seq=65 receive_seq=65 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31999464 coil_temp=21.2 refs=0 mcu_temp=23.06 supply_voltage=2.994 sysload=1.55 cputime=8.769 memavail=3296168 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 42.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3516 bytes_read=8267 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015656 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=882 bytes_read=4843 bytes_retransmit=0 bytes_invalid=0 send_seq=121 receive_seq=121 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999730 adj=49997979 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1452 bytes_read=6027 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000394 adj=63998468 Octopus_Pro_H723_V1.1: temp=30.8 EBB42_Gen2_v1.0: temp=28.2 raspberry_pi: temp=46.3 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=5393 bytes_retransmit=0 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000195 adj=31999471 coil_temp=21.2 refs=0 mcu_temp=23.07 supply_voltage=2.994 sysload=1.55 cputime=8.786 memavail=3299868 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 43.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3522 bytes_read=8368 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015630 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=888 bytes_read=4859 bytes_retransmit=0 bytes_invalid=0 send_seq=122 receive_seq=122 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999766 adj=49998051 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1458 bytes_read=6130 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000343 adj=63997985 Octopus_Pro_H723_V1.1: temp=30.6 EBB42_Gen2_v1.0: temp=28.3 raspberry_pi: temp=47.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=5749 bytes_retransmit=0 bytes_invalid=0 send_seq=67 receive_seq=67 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31999520 coil_temp=21.2 refs=0 mcu_temp=23.08 supply_voltage=2.994 sysload=1.55 cputime=8.802 memavail=3299444 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 44.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3528 bytes_read=8485 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015608 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000007 bytes_write=894 bytes_read=4875 bytes_retransmit=0 bytes_invalid=0 send_seq=123 receive_seq=123 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999791 adj=49998146 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1464 bytes_read=6276 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000306 adj=63997885 Octopus_Pro_H723_V1.1: temp=30.8 EBB42_Gen2_v1.0: temp=28.1 raspberry_pi: temp=46.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=6105 bytes_retransmit=0 bytes_invalid=0 send_seq=68 receive_seq=68 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31999262 coil_temp=21.2 refs=0 mcu_temp=23.11 supply_voltage=2.994 sysload=1.55 cputime=8.820 memavail=3298696 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 45.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3534 bytes_read=8617 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015616 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=900 bytes_read=4904 bytes_retransmit=0 bytes_invalid=0 send_seq=124 receive_seq=124 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999806 adj=49998182 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1470 bytes_read=6379 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000297 adj=63997737 Octopus_Pro_H723_V1.1: temp=30.8 EBB42_Gen2_v1.0: temp=28.3 raspberry_pi: temp=46.3 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=6461 bytes_retransmit=0 bytes_invalid=0 send_seq=69 receive_seq=69 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31999118 coil_temp=21.2 refs=0 mcu_temp=23.12 supply_voltage=2.994 sysload=1.42 cputime=8.837 memavail=3298704 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 46.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3540 bytes_read=8720 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015731 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=906 bytes_read=4920 bytes_retransmit=0 bytes_invalid=0 send_seq=125 receive_seq=125 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999815 adj=49998164 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1476 bytes_read=6482 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000345 adj=63997708 Octopus_Pro_H723_V1.1: temp=30.7 EBB42_Gen2_v1.0: temp=28.4 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=6817 bytes_retransmit=0 bytes_invalid=0 send_seq=70 receive_seq=70 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000204 adj=31999129 coil_temp=21.2 refs=0 mcu_temp=23.14 supply_voltage=2.994 sysload=1.42 cputime=8.854 memavail=3298704 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 47.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3546 bytes_read=8823 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015743 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=912 bytes_read=4936 bytes_retransmit=0 bytes_invalid=0 send_seq=126 receive_seq=126 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999829 adj=49998056 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1482 bytes_read=6614 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000329 adj=63997866 Octopus_Pro_H723_V1.1: temp=30.8 EBB42_Gen2_v1.0: temp=28.3 raspberry_pi: temp=47.2 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=7173 bytes_retransmit=0 bytes_invalid=0 send_seq=71 receive_seq=71 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000181 adj=31999213 coil_temp=21.2 refs=0 mcu_temp=23.16 supply_voltage=2.994 sysload=1.42 cputime=8.871 memavail=3298704 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 48.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3552 bytes_read=8955 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015744 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=918 bytes_read=4952 bytes_retransmit=0 bytes_invalid=0 send_seq=127 receive_seq=127 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999839 adj=49998068 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1488 bytes_read=6717 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000316 adj=63997767 Octopus_Pro_H723_V1.1: temp=30.8 EBB42_Gen2_v1.0: temp=28.3 raspberry_pi: temp=46.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=7529 bytes_retransmit=0 bytes_invalid=0 send_seq=72 receive_seq=72 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000170 adj=31999035 coil_temp=21.2 refs=0 mcu_temp=23.17 supply_voltage=2.994 sysload=1.42 cputime=8.889 memavail=3298704 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 49.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3558 bytes_read=9058 bytes_retransmit=9 bytes_invalid=0 send_seq=301 receive_seq=301 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015801 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=924 bytes_read=4968 bytes_retransmit=0 bytes_invalid=0 send_seq=128 receive_seq=128 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999838 adj=49998070 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1494 bytes_read=6834 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000343 adj=63997709 Octopus_Pro_H723_V1.1: temp=30.7 EBB42_Gen2_v1.0: temp=28.5 raspberry_pi: temp=46.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=7885 bytes_retransmit=0 bytes_invalid=0 send_seq=73 receive_seq=73 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000153 adj=31998948 coil_temp=21.2 refs=0 mcu_temp=23.18 supply_voltage=2.994 sysload=1.42 cputime=8.907 memavail=3298460 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 50.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3564 bytes_read=9175 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015804 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=930 bytes_read=4997 bytes_retransmit=0 bytes_invalid=0 send_seq=129 receive_seq=129 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999849 adj=49997993 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1500 bytes_read=6966 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000334 adj=63997827 Octopus_Pro_H723_V1.1: temp=30.9 EBB42_Gen2_v1.0: temp=28.5 raspberry_pi: temp=47.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=8241 bytes_retransmit=0 bytes_invalid=0 send_seq=74 receive_seq=74 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000141 adj=31998914 coil_temp=21.2 refs=0 mcu_temp=23.20 supply_voltage=2.994 sysload=1.31 cputime=8.924 memavail=3298460 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 51.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3570 bytes_read=9307 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015800 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=936 bytes_read=5013 bytes_retransmit=0 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999861 adj=49998021 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1506 bytes_read=7069 bytes_retransmit=9 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000326 adj=63997770 Octopus_Pro_H723_V1.1: temp=30.8 EBB42_Gen2_v1.0: temp=28.3 raspberry_pi: temp=47.2 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=8597 bytes_retransmit=0 bytes_invalid=0 send_seq=75 receive_seq=75 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998845 coil_temp=21.2 refs=0 mcu_temp=23.21 supply_voltage=2.994 sysload=1.31 cputime=8.941 memavail=3298460 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 52.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3576 bytes_read=9410 bytes_retransmit=9 bytes_invalid=0 send_seq=304 receive_seq=304 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015792 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=942 bytes_read=5029 bytes_retransmit=0 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999861 adj=49998056 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1512 bytes_read=7172 bytes_retransmit=9 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000320 adj=63997739 Octopus_Pro_H723_V1.1: temp=31.0 EBB42_Gen2_v1.0: temp=28.4 raspberry_pi: temp=46.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=8953 bytes_retransmit=0 bytes_invalid=0 send_seq=76 receive_seq=76 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000134 adj=31998832 coil_temp=21.2 refs=0 mcu_temp=23.22 supply_voltage=2.994 sysload=1.31 cputime=8.958 memavail=3298460 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 53.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3582 bytes_read=9508 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015816 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=948 bytes_read=5045 bytes_retransmit=0 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999869 adj=49998024 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1518 bytes_read=7304 bytes_retransmit=9 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000321 adj=63997723 Octopus_Pro_H723_V1.1: temp=30.8 EBB42_Gen2_v1.0: temp=28.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=9309 bytes_retransmit=0 bytes_invalid=0 send_seq=77 receive_seq=77 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000140 adj=31998826 coil_temp=21.2 refs=0 mcu_temp=23.24 supply_voltage=2.994 sysload=1.31 cputime=8.975 memavail=3298220 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 54.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3588 bytes_read=9638 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015794 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=954 bytes_read=5061 bytes_retransmit=0 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999875 adj=49998017 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1524 bytes_read=7421 bytes_retransmit=9 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000318 adj=63997722 Octopus_Pro_H723_V1.1: temp=31.0 EBB42_Gen2_v1.0: temp=28.4 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=9665 bytes_retransmit=0 bytes_invalid=0 send_seq=78 receive_seq=78 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998860 coil_temp=21.2 refs=0 mcu_temp=23.24 supply_voltage=2.994 sysload=1.31 cputime=8.993 memavail=3298220 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 55.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3594 bytes_read=9755 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015780 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=960 bytes_read=5090 bytes_retransmit=0 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999877 adj=49998043 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1530 bytes_read=7517 bytes_retransmit=9 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000342 adj=63997744 Octopus_Pro_H723_V1.1: temp=31.0 EBB42_Gen2_v1.0: temp=28.4 raspberry_pi: temp=46.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=10021 bytes_retransmit=0 bytes_invalid=0 send_seq=79 receive_seq=79 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000138 adj=31998887 coil_temp=21.2 refs=0 mcu_temp=23.26 supply_voltage=2.994 sysload=1.20 cputime=9.009 memavail=3298220 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 56.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3600 bytes_read=9858 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015819 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=966 bytes_read=5106 bytes_retransmit=0 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999888 adj=49998030 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1536 bytes_read=7640 bytes_retransmit=9 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000337 adj=63997928 Octopus_Pro_H723_V1.1: temp=31.0 EBB42_Gen2_v1.0: temp=28.5 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=10377 bytes_retransmit=0 bytes_invalid=0 send_seq=80 receive_seq=80 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000146 adj=31998872 coil_temp=21.2 refs=0 mcu_temp=23.27 supply_voltage=2.994 sysload=1.20 cputime=9.027 memavail=3298220 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 57.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3606 bytes_read=9990 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015908 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=972 bytes_read=5122 bytes_retransmit=0 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999902 adj=49998044 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1542 bytes_read=7736 bytes_retransmit=9 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000334 adj=63997824 Octopus_Pro_H723_V1.1: temp=30.9 EBB42_Gen2_v1.0: temp=28.5 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=10733 bytes_retransmit=0 bytes_invalid=0 send_seq=81 receive_seq=81 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998900 coil_temp=21.2 refs=0 mcu_temp=23.29 supply_voltage=2.994 sysload=1.20 cputime=9.044 memavail=3298220 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 58.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3612 bytes_read=10093 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015907 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=978 bytes_read=5138 bytes_retransmit=0 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999903 adj=49998029 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1548 bytes_read=7832 bytes_retransmit=9 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000331 adj=63997697 Octopus_Pro_H723_V1.1: temp=30.9 EBB42_Gen2_v1.0: temp=28.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=11089 bytes_retransmit=0 bytes_invalid=0 send_seq=82 receive_seq=82 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000139 adj=31998820 coil_temp=21.2 refs=0 mcu_temp=23.31 supply_voltage=2.994 sysload=1.20 cputime=9.061 memavail=3298220 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 59.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3618 bytes_read=10196 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015913 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=984 bytes_read=5154 bytes_retransmit=0 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999907 adj=49998009 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1554 bytes_read=7976 bytes_retransmit=9 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000328 adj=63997702 Octopus_Pro_H723_V1.1: temp=31.0 EBB42_Gen2_v1.0: temp=28.5 raspberry_pi: temp=47.2 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=11445 bytes_retransmit=0 bytes_invalid=0 send_seq=83 receive_seq=83 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998816 coil_temp=21.2 refs=0 mcu_temp=23.33 supply_voltage=2.994 sysload=1.20 cputime=9.079 memavail=3311844 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 60.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3624 bytes_read=10342 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015901 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=990 bytes_read=5183 bytes_retransmit=0 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999909 adj=49998009 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1560 bytes_read=8079 bytes_retransmit=9 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000328 adj=63997698 Octopus_Pro_H723_V1.1: temp=31.1 EBB42_Gen2_v1.0: temp=28.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=504 bytes_read=11801 bytes_retransmit=0 bytes_invalid=0 send_seq=84 receive_seq=84 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000136 adj=31998807 coil_temp=21.2 refs=0 mcu_temp=23.34 supply_voltage=2.994 sysload=1.11 cputime=9.099 memavail=3311340 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 61.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3630 bytes_read=10445 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015919 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=996 bytes_read=5199 bytes_retransmit=0 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999912 adj=49998009 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1566 bytes_read=8182 bytes_retransmit=9 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000328 adj=63997733 Octopus_Pro_H723_V1.1: temp=31.1 EBB42_Gen2_v1.0: temp=28.5 raspberry_pi: temp=48.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=510 bytes_read=12157 bytes_retransmit=0 bytes_invalid=0 send_seq=85 receive_seq=85 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000140 adj=31998825 coil_temp=21.2 refs=0 mcu_temp=23.35 supply_voltage=2.994 sysload=1.11 cputime=9.116 memavail=3311340 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 62.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3636 bytes_read=10548 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015934 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1002 bytes_read=5215 bytes_retransmit=0 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999921 adj=49997994 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1572 bytes_read=8314 bytes_retransmit=9 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000333 adj=63997720 Octopus_Pro_H723_V1.1: temp=31.1 EBB42_Gen2_v1.0: temp=28.5 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=516 bytes_read=12513 bytes_retransmit=0 bytes_invalid=0 send_seq=86 receive_seq=86 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998849 coil_temp=21.2 refs=0 mcu_temp=23.35 supply_voltage=2.994 sysload=1.11 cputime=9.133 memavail=3311340 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 63.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3642 bytes_read=10680 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015925 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1008 bytes_read=5231 bytes_retransmit=0 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999920 adj=49998030 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1578 bytes_read=8417 bytes_retransmit=9 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000332 adj=63997757 Octopus_Pro_H723_V1.1: temp=31.1 EBB42_Gen2_v1.0: temp=28.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=522 bytes_read=12869 bytes_retransmit=0 bytes_invalid=0 send_seq=87 receive_seq=87 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000135 adj=31998825 coil_temp=21.2 refs=0 mcu_temp=23.35 supply_voltage=2.994 sysload=1.11 cputime=9.214 memavail=3311344 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 64.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3648 bytes_read=10778 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015913 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1014 bytes_read=5247 bytes_retransmit=0 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999923 adj=49998008 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1584 bytes_read=8534 bytes_retransmit=9 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000341 adj=63997766 Octopus_Pro_H723_V1.1: temp=31.2 EBB42_Gen2_v1.0: temp=28.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=528 bytes_read=13225 bytes_retransmit=0 bytes_invalid=0 send_seq=88 receive_seq=88 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000133 adj=31998822 coil_temp=21.2 refs=0 mcu_temp=23.35 supply_voltage=2.994 sysload=1.11 cputime=9.231 memavail=3311096 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 65.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3654 bytes_read=10895 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015912 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1020 bytes_read=5276 bytes_retransmit=0 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999958 adj=49998027 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1590 bytes_read=8666 bytes_retransmit=9 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000340 adj=63997859 Octopus_Pro_H723_V1.1: temp=31.1 EBB42_Gen2_v1.0: temp=28.7 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=534 bytes_read=13581 bytes_retransmit=0 bytes_invalid=0 send_seq=89 receive_seq=89 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000134 adj=31998827 coil_temp=21.2 refs=0 mcu_temp=23.35 supply_voltage=2.994 sysload=1.02 cputime=9.249 memavail=3311244 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.2 pwm=0.000
Stats 66.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3660 bytes_read=11027 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015894 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1026 bytes_read=5292 bytes_retransmit=0 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999968 adj=49998292 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1596 bytes_read=8769 bytes_retransmit=9 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000339 adj=63997834 Octopus_Pro_H723_V1.1: temp=31.1 EBB42_Gen2_v1.0: temp=28.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=540 bytes_read=13937 bytes_retransmit=0 bytes_invalid=0 send_seq=90 receive_seq=90 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000134 adj=31998843 coil_temp=21.2 refs=0 mcu_temp=23.36 supply_voltage=2.994 sysload=1.02 cputime=9.266 memavail=3311348 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 67.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3666 bytes_read=11130 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015899 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1032 bytes_read=5308 bytes_retransmit=0 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999992 adj=49998313 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1602 bytes_read=8872 bytes_retransmit=9 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000338 adj=63997838 Octopus_Pro_H723_V1.1: temp=31.1 EBB42_Gen2_v1.0: temp=28.5 raspberry_pi: temp=47.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=546 bytes_read=14293 bytes_retransmit=0 bytes_invalid=0 send_seq=91 receive_seq=91 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000134 adj=31998859 coil_temp=21.2 refs=0 mcu_temp=23.37 supply_voltage=2.994 sysload=1.02 cputime=9.284 memavail=3311348 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 68.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3672 bytes_read=11233 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015935 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1038 bytes_read=5324 bytes_retransmit=0 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999996 adj=49998431 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1608 bytes_read=9004 bytes_retransmit=9 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000342 adj=63997818 Octopus_Pro_H723_V1.1: temp=31.0 EBB42_Gen2_v1.0: temp=28.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=552 bytes_read=14649 bytes_retransmit=0 bytes_invalid=0 send_seq=92 receive_seq=92 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998860 coil_temp=21.2 refs=0 mcu_temp=23.38 supply_voltage=2.994 sysload=1.02 cputime=9.301 memavail=3311348 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 69.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3678 bytes_read=11365 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015980 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1044 bytes_read=5340 bytes_retransmit=0 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999993 adj=49998320 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1614 bytes_read=9121 bytes_retransmit=9 bytes_invalid=0 send_seq=184 receive_seq=184 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000364 adj=63997795 Octopus_Pro_H723_V1.1: temp=31.0 EBB42_Gen2_v1.0: temp=28.4 raspberry_pi: temp=47.7 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=558 bytes_read=15005 bytes_retransmit=0 bytes_invalid=0 send_seq=93 receive_seq=93 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998856 coil_temp=21.2 refs=0 mcu_temp=23.39 supply_voltage=2.994 sysload=1.02 cputime=9.319 memavail=3311348 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 70.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3684 bytes_read=11482 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015998 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1050 bytes_read=5369 bytes_retransmit=0 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999991 adj=49998164 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1620 bytes_read=9224 bytes_retransmit=9 bytes_invalid=0 send_seq=185 receive_seq=185 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997919 Octopus_Pro_H723_V1.1: temp=31.4 EBB42_Gen2_v1.0: temp=28.9 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=564 bytes_read=15361 bytes_retransmit=0 bytes_invalid=0 send_seq=94 receive_seq=94 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998829 coil_temp=21.2 refs=0 mcu_temp=23.41 supply_voltage=2.994 sysload=0.93 cputime=9.336 memavail=3311348 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 71.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3690 bytes_read=11585 bytes_retransmit=9 bytes_invalid=0 send_seq=323 receive_seq=323 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015982 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1056 bytes_read=5385 bytes_retransmit=0 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999992 adj=49998077 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1626 bytes_read=9356 bytes_retransmit=9 bytes_invalid=0 send_seq=186 receive_seq=186 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000358 adj=63997839 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=28.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=570 bytes_read=15717 bytes_retransmit=0 bytes_invalid=0 send_seq=95 receive_seq=95 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000136 adj=31998821 coil_temp=21.2 refs=0 mcu_temp=23.42 supply_voltage=2.994 sysload=0.93 cputime=9.354 memavail=3311348 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 72.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3696 bytes_read=11717 bytes_retransmit=9 bytes_invalid=0 send_seq=324 receive_seq=324 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015968 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1062 bytes_read=5401 bytes_retransmit=0 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000008 adj=49998087 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1632 bytes_read=9459 bytes_retransmit=9 bytes_invalid=0 send_seq=187 receive_seq=187 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000358 adj=63997830 Octopus_Pro_H723_V1.1: temp=31.2 EBB42_Gen2_v1.0: temp=28.6 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=576 bytes_read=16073 bytes_retransmit=0 bytes_invalid=0 send_seq=96 receive_seq=96 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000135 adj=31998833 coil_temp=21.2 refs=0 mcu_temp=23.43 supply_voltage=2.994 sysload=0.93 cputime=9.371 memavail=3313112 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 73.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3702 bytes_read=11820 bytes_retransmit=9 bytes_invalid=0 send_seq=325 receive_seq=325 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015968 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1068 bytes_read=5417 bytes_retransmit=0 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000035 adj=49998233 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1638 bytes_read=9562 bytes_retransmit=9 bytes_invalid=0 send_seq=188 receive_seq=188 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997839 Octopus_Pro_H723_V1.1: temp=31.2 EBB42_Gen2_v1.0: temp=28.7 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=582 bytes_read=16429 bytes_retransmit=0 bytes_invalid=0 send_seq=97 receive_seq=97 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000136 adj=31998838 coil_temp=21.2 refs=0 mcu_temp=23.45 supply_voltage=2.994 sysload=0.93 cputime=9.387 memavail=3313112 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 74.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3708 bytes_read=11923 bytes_retransmit=9 bytes_invalid=0 send_seq=326 receive_seq=326 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015946 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1074 bytes_read=5433 bytes_retransmit=0 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000067 adj=49998428 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1644 bytes_read=9708 bytes_retransmit=9 bytes_invalid=0 send_seq=189 receive_seq=189 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997808 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=28.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=588 bytes_read=16785 bytes_retransmit=0 bytes_invalid=0 send_seq=98 receive_seq=98 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000136 adj=31998858 coil_temp=21.2 refs=0 mcu_temp=23.46 supply_voltage=2.994 sysload=0.93 cputime=9.405 memavail=3312124 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 75.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3714 bytes_read=12064 bytes_retransmit=9 bytes_invalid=0 send_seq=327 receive_seq=327 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015933 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=1080 bytes_read=5462 bytes_retransmit=0 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000110 adj=49998665 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1650 bytes_read=9811 bytes_retransmit=9 bytes_invalid=0 send_seq=190 receive_seq=190 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000353 adj=63997826 Octopus_Pro_H723_V1.1: temp=31.2 EBB42_Gen2_v1.0: temp=28.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=594 bytes_read=17141 bytes_retransmit=0 bytes_invalid=0 send_seq=99 receive_seq=99 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000136 adj=31998869 coil_temp=21.2 refs=0 mcu_temp=23.46 supply_voltage=2.994 sysload=0.86 cputime=9.422 memavail=3312124 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 76.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3720 bytes_read=12167 bytes_retransmit=9 bytes_invalid=0 send_seq=328 receive_seq=328 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015937 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=1086 bytes_read=5478 bytes_retransmit=0 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000151 adj=49998942 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1656 bytes_read=9914 bytes_retransmit=9 bytes_invalid=0 send_seq=191 receive_seq=191 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997830 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=28.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=600 bytes_read=17497 bytes_retransmit=0 bytes_invalid=0 send_seq=100 receive_seq=100 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000135 adj=31998879 coil_temp=21.2 refs=0 mcu_temp=23.47 supply_voltage=2.994 sysload=0.86 cputime=9.439 memavail=3312124 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 77.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3726 bytes_read=12270 bytes_retransmit=9 bytes_invalid=0 send_seq=329 receive_seq=329 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015927 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=1092 bytes_read=5494 bytes_retransmit=0 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000196 adj=49999132 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1662 bytes_read=10046 bytes_retransmit=9 bytes_invalid=0 send_seq=192 receive_seq=192 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997838 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=28.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=606 bytes_read=17853 bytes_retransmit=0 bytes_invalid=0 send_seq=101 receive_seq=101 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000135 adj=31998864 coil_temp=21.2 refs=0 mcu_temp=23.47 supply_voltage=2.994 sysload=0.86 cputime=9.456 memavail=3312124 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 78.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3732 bytes_read=12402 bytes_retransmit=9 bytes_invalid=0 send_seq=330 receive_seq=330 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015913 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=1098 bytes_read=5510 bytes_retransmit=0 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000245 adj=49999350 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1668 bytes_read=10149 bytes_retransmit=9 bytes_invalid=0 send_seq=193 receive_seq=193 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997838 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=28.8 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=612 bytes_read=18209 bytes_retransmit=0 bytes_invalid=0 send_seq=102 receive_seq=102 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000135 adj=31998874 coil_temp=21.2 refs=0 mcu_temp=23.49 supply_voltage=2.994 sysload=0.86 cputime=9.473 memavail=3312128 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 79.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3738 bytes_read=12505 bytes_retransmit=9 bytes_invalid=0 send_seq=331 receive_seq=331 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015919 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=1104 bytes_read=5526 bytes_retransmit=0 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000295 adj=49999572 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1674 bytes_read=10266 bytes_retransmit=9 bytes_invalid=0 send_seq=194 receive_seq=194 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997864 Octopus_Pro_H723_V1.1: temp=31.2 EBB42_Gen2_v1.0: temp=28.9 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=618 bytes_read=18565 bytes_retransmit=0 bytes_invalid=0 send_seq=103 receive_seq=103 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000135 adj=31998878 coil_temp=21.2 refs=0 mcu_temp=23.50 supply_voltage=2.994 sysload=0.86 cputime=9.491 memavail=3311376 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 80.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3744 bytes_read=12622 bytes_retransmit=9 bytes_invalid=0 send_seq=332 receive_seq=332 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015905 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=1110 bytes_read=5555 bytes_retransmit=0 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000357 adj=49999754 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1680 bytes_read=10398 bytes_retransmit=9 bytes_invalid=0 send_seq=195 receive_seq=195 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997843 Octopus_Pro_H723_V1.1: temp=31.1 EBB42_Gen2_v1.0: temp=28.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=624 bytes_read=18921 bytes_retransmit=0 bytes_invalid=0 send_seq=104 receive_seq=104 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000136 adj=31998868 coil_temp=21.2 refs=0 mcu_temp=23.51 supply_voltage=2.994 sysload=0.79 cputime=9.509 memavail=3311376 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 81.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3750 bytes_read=12754 bytes_retransmit=9 bytes_invalid=0 send_seq=333 receive_seq=333 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015964 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=1116 bytes_read=5571 bytes_retransmit=0 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000418 adj=50000044 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1686 bytes_read=10501 bytes_retransmit=9 bytes_invalid=0 send_seq=196 receive_seq=196 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997846 Octopus_Pro_H723_V1.1: temp=31.4 EBB42_Gen2_v1.0: temp=28.9 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=630 bytes_read=19277 bytes_retransmit=0 bytes_invalid=0 send_seq=105 receive_seq=105 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000136 adj=31998887 coil_temp=21.2 refs=0 mcu_temp=23.52 supply_voltage=2.994 sysload=0.79 cputime=9.526 memavail=3311124 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 82.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3756 bytes_read=12857 bytes_retransmit=9 bytes_invalid=0 send_seq=334 receive_seq=334 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015968 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=1122 bytes_read=5587 bytes_retransmit=0 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000467 adj=50000182 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1692 bytes_read=10604 bytes_retransmit=9 bytes_invalid=0 send_seq=197 receive_seq=197 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997733 Octopus_Pro_H723_V1.1: temp=31.2 EBB42_Gen2_v1.0: temp=28.9 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=636 bytes_read=19633 bytes_retransmit=0 bytes_invalid=0 send_seq=106 receive_seq=106 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000135 adj=31998831 coil_temp=21.3 refs=0 mcu_temp=23.53 supply_voltage=2.994 sysload=0.79 cputime=9.543 memavail=3311128 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 83.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3762 bytes_read=12960 bytes_retransmit=9 bytes_invalid=0 send_seq=335 receive_seq=335 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015953 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=1128 bytes_read=5603 bytes_retransmit=0 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000533 adj=50000259 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1698 bytes_read=10736 bytes_retransmit=9 bytes_invalid=0 send_seq=198 receive_seq=198 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997757 Octopus_Pro_H723_V1.1: temp=31.4 EBB42_Gen2_v1.0: temp=28.9 raspberry_pi: temp=47.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=642 bytes_read=19989 bytes_retransmit=0 bytes_invalid=0 send_seq=107 receive_seq=107 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000135 adj=31998834 coil_temp=21.2 refs=0 mcu_temp=23.55 supply_voltage=2.994 sysload=0.79 cputime=9.560 memavail=3310400 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 84.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3768 bytes_read=13092 bytes_retransmit=9 bytes_invalid=0 send_seq=336 receive_seq=336 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015942 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=1134 bytes_read=5619 bytes_retransmit=0 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000576 adj=50000531 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1704 bytes_read=10853 bytes_retransmit=9 bytes_invalid=0 send_seq=199 receive_seq=199 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997794 Octopus_Pro_H723_V1.1: temp=31.4 EBB42_Gen2_v1.0: temp=28.9 raspberry_pi: temp=48.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=648 bytes_read=20345 bytes_retransmit=0 bytes_invalid=0 send_seq=108 receive_seq=108 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998853 coil_temp=21.3 refs=0 mcu_temp=23.55 supply_voltage=2.994 sysload=0.79 cputime=9.578 memavail=3309140 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 85.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3774 bytes_read=13207 bytes_retransmit=9 bytes_invalid=0 send_seq=337 receive_seq=337 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015934 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1140 bytes_read=5648 bytes_retransmit=0 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000615 adj=50000508 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1710 bytes_read=10956 bytes_retransmit=9 bytes_invalid=0 send_seq=200 receive_seq=200 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000360 adj=63997836 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=28.9 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=654 bytes_read=20701 bytes_retransmit=0 bytes_invalid=0 send_seq=109 receive_seq=109 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998876 coil_temp=21.3 refs=0 mcu_temp=23.56 supply_voltage=2.994 sysload=0.73 cputime=9.595 memavail=3309140 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.3 pwm=0.000
Stats 86.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3780 bytes_read=13307 bytes_retransmit=9 bytes_invalid=0 send_seq=338 receive_seq=338 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015923 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1146 bytes_read=5664 bytes_retransmit=0 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000653 adj=50000469 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1716 bytes_read=11088 bytes_retransmit=9 bytes_invalid=0 send_seq=201 receive_seq=201 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997871 Octopus_Pro_H723_V1.1: temp=31.4 EBB42_Gen2_v1.0: temp=29.1 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=660 bytes_read=21057 bytes_retransmit=0 bytes_invalid=0 send_seq=110 receive_seq=110 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998878 coil_temp=21.3 refs=0 mcu_temp=23.57 supply_voltage=2.994 sysload=0.73 cputime=9.612 memavail=3309140 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 87.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3786 bytes_read=13439 bytes_retransmit=9 bytes_invalid=0 send_seq=339 receive_seq=339 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015916 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1152 bytes_read=5680 bytes_retransmit=0 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000687 adj=50000430 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1722 bytes_read=11191 bytes_retransmit=9 bytes_invalid=0 send_seq=202 receive_seq=202 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997893 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=28.8 raspberry_pi: temp=47.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=666 bytes_read=21413 bytes_retransmit=0 bytes_invalid=0 send_seq=111 receive_seq=111 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000138 adj=31998887 coil_temp=21.3 refs=0 mcu_temp=23.57 supply_voltage=2.994 sysload=0.73 cputime=9.629 memavail=3309288 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 88.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3792 bytes_read=13542 bytes_retransmit=9 bytes_invalid=0 send_seq=340 receive_seq=340 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015907 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1158 bytes_read=5696 bytes_retransmit=0 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000722 adj=50000379 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1728 bytes_read=11294 bytes_retransmit=9 bytes_invalid=0 send_seq=203 receive_seq=203 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997885 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=28.9 raspberry_pi: temp=48.7 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=672 bytes_read=21769 bytes_retransmit=0 bytes_invalid=0 send_seq=112 receive_seq=112 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000138 adj=31998896 coil_temp=21.3 refs=0 mcu_temp=23.58 supply_voltage=2.994 sysload=0.73 cputime=9.646 memavail=3309392 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.1 pwm=0.000
Stats 89.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3798 bytes_read=13645 bytes_retransmit=9 bytes_invalid=0 send_seq=341 receive_seq=341 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015912 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1164 bytes_read=5712 bytes_retransmit=0 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000757 adj=50000367 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1734 bytes_read=11440 bytes_retransmit=9 bytes_invalid=0 send_seq=204 receive_seq=204 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997885 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=29.0 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=678 bytes_read=22125 bytes_retransmit=0 bytes_invalid=0 send_seq=113 receive_seq=113 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000140 adj=31998905 coil_temp=21.3 refs=0 mcu_temp=23.59 supply_voltage=2.994 sysload=0.73 cputime=9.664 memavail=3309140 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 90.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3804 bytes_read=13791 bytes_retransmit=9 bytes_invalid=0 send_seq=342 receive_seq=342 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015907 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1170 bytes_read=5741 bytes_retransmit=0 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000788 adj=50000346 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1740 bytes_read=11543 bytes_retransmit=9 bytes_invalid=0 send_seq=205 receive_seq=205 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997855 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=29.1 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=684 bytes_read=22481 bytes_retransmit=0 bytes_invalid=0 send_seq=114 receive_seq=114 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000141 adj=31998904 coil_temp=21.3 refs=0 mcu_temp=23.60 supply_voltage=2.994 sysload=0.67 cputime=9.682 memavail=3309140 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 91.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3810 bytes_read=13894 bytes_retransmit=9 bytes_invalid=0 send_seq=343 receive_seq=343 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015924 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1176 bytes_read=5757 bytes_retransmit=0 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000820 adj=50000317 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1746 bytes_read=11646 bytes_retransmit=9 bytes_invalid=0 send_seq=206 receive_seq=206 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997865 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=29.0 raspberry_pi: temp=48.2 heater_bed: target=0 temp=20.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=690 bytes_read=22837 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998914 coil_temp=21.3 refs=0 mcu_temp=23.62 supply_voltage=2.994 sysload=0.67 cputime=9.699 memavail=3309140 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 92.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3816 bytes_read=13997 bytes_retransmit=9 bytes_invalid=0 send_seq=344 receive_seq=344 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015924 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1182 bytes_read=5773 bytes_retransmit=0 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000845 adj=50000272 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1752 bytes_read=11778 bytes_retransmit=9 bytes_invalid=0 send_seq=207 receive_seq=207 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997820 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=29.0 raspberry_pi: temp=48.2 heater_bed: target=0 temp=19.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=696 bytes_read=23193 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000143 adj=31998899 coil_temp=21.3 refs=0 mcu_temp=23.64 supply_voltage=2.994 sysload=0.67 cputime=9.716 memavail=3309288 print_time=44.183 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
ratos: beacon probing regions updated: BeaconProbingRegions(x_offset=0.0, y_offset=22.5, printable_x_max=330.0, printable_y_max=350.0, mesh_proximity_min_coil_pos=(20.0, 30.0), mesh_proximity_max_coil_pos=(310.0, 310.0), mesh_proximity_min_toolhead_pos=(20.0, 7.5), mesh_proximity_max_toolhead_pos=(310.0, 287.5), mesh_contact_min=(20.0, 30.0), mesh_contact_max=(310.0, 287.5), logical_proximity_min_coil_pos=(20.0, 20.0), logical_proximity_max_coil_pos=(310.0, 330.0), logical_proximity_min_toolhead_pos=(20.0, -2.5), logical_proximity_max_toolhead_pos=(310.0, 307.5), logical_contact_min=(10.0, -12.5), logical_contact_max=(320.0, 317.5))
Stats 788.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=9802 bytes_read=95589 bytes_retransmit=9 bytes_invalid=0 send_seq=1135 receive_seq=1135 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015937 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5430 bytes_read=18846 bytes_retransmit=0 bytes_invalid=0 send_seq=879 receive_seq=879 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999973 adj=49997904 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6000 bytes_read=92007 bytes_retransmit=9 bytes_invalid=0 send_seq=915 receive_seq=915 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000371 adj=63997782 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4944 bytes_read=270535 bytes_retransmit=0 bytes_invalid=0 send_seq=824 receive_seq=824 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000159 adj=31998883 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.21 cputime=25.123 memavail=3315736 print_time=800.840 buffer_time=1.023 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
TMC 'stepper_z' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_z1' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_z2' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_z3' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_z' reports GSTAT: 00000000
TMC 'stepper_z1' reports GSTAT: 00000000
TMC 'stepper_z2' reports GSTAT: 00000000
TMC 'stepper_z3' reports GSTAT: 00000000
Stats 789.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=10602 bytes_read=96307 bytes_retransmit=9 bytes_invalid=0 send_seq=1170 receive_seq=1170 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015933 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5436 bytes_read=18862 bytes_retransmit=0 bytes_invalid=0 send_seq=880 receive_seq=880 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999969 adj=49997832 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6006 bytes_read=92124 bytes_retransmit=9 bytes_invalid=0 send_seq=916 receive_seq=916 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000372 adj=63997748 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4950 bytes_read=270891 bytes_retransmit=0 bytes_invalid=0 send_seq=825 receive_seq=825 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000158 adj=31998857 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.21 cputime=25.177 memavail=3314728 print_time=800.840 buffer_time=0.022 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
TMC 'stepper_x' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_y' reports GSTAT: 00000001 reset=1(Reset)
TMC 'stepper_x' reports GSTAT: 00000000
TMC 'stepper_y' reports GSTAT: 00000000
Endstop y still triggered after retract
Endstop y still triggered after retract
Endstop y still triggered after retract
Pausing toolhead to calculate stepper_z phase offset
Stats 790.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=12473 bytes_read=97929 bytes_retransmit=9 bytes_invalid=0 send_seq=1264 receive_seq=1264 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=48 upcoming_bytes=0 freq=400015925 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5442 bytes_read=18878 bytes_retransmit=0 bytes_invalid=0 send_seq=881 receive_seq=881 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999967 adj=49997787 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6012 bytes_read=92227 bytes_retransmit=9 bytes_invalid=0 send_seq=917 receive_seq=917 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000371 adj=63997780 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4956 bytes_read=271247 bytes_retransmit=0 bytes_invalid=0 send_seq=826 receive_seq=826 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000160 adj=31998850 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.27 cputime=25.280 memavail=3306928 print_time=802.329 buffer_time=0.511 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Pausing toolhead to calculate stepper_z1 phase offset
Pausing toolhead to calculate stepper_z2 phase offset
Pausing toolhead to calculate stepper_z3 phase offset
Stats 791.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=12588 bytes_read=98129 bytes_retransmit=9 bytes_invalid=0 send_seq=1270 receive_seq=1270 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015923 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5448 bytes_read=18894 bytes_retransmit=0 bytes_invalid=0 send_seq=882 receive_seq=882 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999967 adj=49997820 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6018 bytes_read=92359 bytes_retransmit=9 bytes_invalid=0 send_seq=918 receive_seq=918 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000371 adj=63997796 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4962 bytes_read=271603 bytes_retransmit=0 bytes_invalid=0 send_seq=827 receive_seq=827 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000159 adj=31998893 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.27 cputime=25.314 memavail=3305212 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 792.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=12594 bytes_read=98261 bytes_retransmit=9 bytes_invalid=0 send_seq=1271 receive_seq=1271 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015955 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5454 bytes_read=18910 bytes_retransmit=0 bytes_invalid=0 send_seq=883 receive_seq=883 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999967 adj=49997843 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6024 bytes_read=92462 bytes_retransmit=9 bytes_invalid=0 send_seq=919 receive_seq=919 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997800 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4968 bytes_read=271959 bytes_retransmit=0 bytes_invalid=0 send_seq=828 receive_seq=828 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000159 adj=31998881 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.27 cputime=25.339 memavail=3305212 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 793.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=12600 bytes_read=98379 bytes_retransmit=9 bytes_invalid=0 send_seq=1272 receive_seq=1272 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015954 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 bytes_write=5460 bytes_read=18939 bytes_retransmit=0 bytes_invalid=0 send_seq=884 receive_seq=884 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999963 adj=49997819 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6030 bytes_read=92558 bytes_retransmit=9 bytes_invalid=0 send_seq=920 receive_seq=920 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997713 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4974 bytes_read=272315 bytes_retransmit=0 bytes_invalid=0 send_seq=829 receive_seq=829 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000158 adj=31998844 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.27 cputime=25.363 memavail=3316260 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 794.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=12606 bytes_read=98477 bytes_retransmit=9 bytes_invalid=0 send_seq=1273 receive_seq=1273 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015958 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 bytes_write=5466 bytes_read=18955 bytes_retransmit=0 bytes_invalid=0 send_seq=885 receive_seq=885 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999960 adj=49997801 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6036 bytes_read=92695 bytes_retransmit=9 bytes_invalid=0 send_seq=921 receive_seq=921 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997729 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4980 bytes_read=272671 bytes_retransmit=0 bytes_invalid=0 send_seq=830 receive_seq=830 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000159 adj=31998842 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.27 cputime=25.388 memavail=3314692 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 795.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=12612 bytes_read=98609 bytes_retransmit=9 bytes_invalid=0 send_seq=1274 receive_seq=1274 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015954 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 bytes_write=5472 bytes_read=18971 bytes_retransmit=0 bytes_invalid=0 send_seq=886 receive_seq=886 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999962 adj=49997783 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6042 bytes_read=92791 bytes_retransmit=9 bytes_invalid=0 send_seq=922 receive_seq=922 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997732 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4986 bytes_read=273016 bytes_retransmit=0 bytes_invalid=0 send_seq=831 receive_seq=831 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000158 adj=31998859 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.25 cputime=25.412 memavail=3314692 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 796.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=12618 bytes_read=98712 bytes_retransmit=9 bytes_invalid=0 send_seq=1275 receive_seq=1275 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015950 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 bytes_write=5478 bytes_read=18987 bytes_retransmit=0 bytes_invalid=0 send_seq=887 receive_seq=887 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999961 adj=49997866 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6048 bytes_read=92887 bytes_retransmit=9 bytes_invalid=0 send_seq=923 receive_seq=923 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000374 adj=63997753 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4992 bytes_read=273361 bytes_retransmit=0 bytes_invalid=0 send_seq=832 receive_seq=832 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998855 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.25 cputime=25.437 memavail=3314692 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 797.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=12624 bytes_read=98815 bytes_retransmit=9 bytes_invalid=0 send_seq=1276 receive_seq=1276 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015945 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 bytes_write=5484 bytes_read=19003 bytes_retransmit=0 bytes_invalid=0 send_seq=888 receive_seq=888 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999958 adj=49997891 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6054 bytes_read=93017 bytes_retransmit=9 bytes_invalid=0 send_seq=924 receive_seq=924 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000374 adj=63997876 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4998 bytes_read=273706 bytes_retransmit=0 bytes_invalid=0 send_seq=833 receive_seq=833 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000158 adj=31998857 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.25 cputime=25.461 memavail=3314692 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 798.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=12630 bytes_read=98961 bytes_retransmit=9 bytes_invalid=0 send_seq=1277 receive_seq=1277 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015944 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5490 bytes_read=19032 bytes_retransmit=0 bytes_invalid=0 send_seq=889 receive_seq=889 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999953 adj=49997868 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6060 bytes_read=93120 bytes_retransmit=9 bytes_invalid=0 send_seq=925 receive_seq=925 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000374 adj=63997879 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5004 bytes_read=274051 bytes_retransmit=0 bytes_invalid=0 send_seq=834 receive_seq=834 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998881 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.25 cputime=25.485 memavail=3314692 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 799.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=12636 bytes_read=99064 bytes_retransmit=9 bytes_invalid=0 send_seq=1278 receive_seq=1278 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015941 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5496 bytes_read=19048 bytes_retransmit=0 bytes_invalid=0 send_seq=890 receive_seq=890 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999949 adj=49997825 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6066 bytes_read=93237 bytes_retransmit=9 bytes_invalid=0 send_seq=926 receive_seq=926 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000372 adj=63997857 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5010 bytes_read=274396 bytes_retransmit=0 bytes_invalid=0 send_seq=835 receive_seq=835 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998872 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.25 cputime=25.509 memavail=3314692 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 800.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=12642 bytes_read=99167 bytes_retransmit=9 bytes_invalid=0 send_seq=1279 receive_seq=1279 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015938 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5502 bytes_read=19064 bytes_retransmit=0 bytes_invalid=0 send_seq=891 receive_seq=891 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999946 adj=49997794 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6072 bytes_read=93369 bytes_retransmit=9 bytes_invalid=0 send_seq=927 receive_seq=927 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000372 adj=63997840 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=55.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5016 bytes_read=274741 bytes_retransmit=0 bytes_invalid=0 send_seq=836 receive_seq=836 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998877 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.23 cputime=25.534 memavail=3314700 print_time=802.329 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 801.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=13516 bytes_read=99722 bytes_retransmit=9 bytes_invalid=0 send_seq=1311 receive_seq=1311 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015936 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5508 bytes_read=19080 bytes_retransmit=0 bytes_invalid=0 send_seq=892 receive_seq=892 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999941 adj=49997790 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6078 bytes_read=93472 bytes_retransmit=9 bytes_invalid=0 send_seq=928 receive_seq=928 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000371 adj=63997830 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5022 bytes_read=275086 bytes_retransmit=0 bytes_invalid=0 send_seq=837 receive_seq=837 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998872 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.23 cputime=25.589 memavail=3306188 print_time=814.030 buffer_time=1.206 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 802.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=14970 bytes_read=101106 bytes_retransmit=9 bytes_invalid=0 send_seq=1385 receive_seq=1385 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015933 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5514 bytes_read=19096 bytes_retransmit=0 bytes_invalid=0 send_seq=893 receive_seq=893 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999944 adj=49997814 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6084 bytes_read=93575 bytes_retransmit=9 bytes_invalid=0 send_seq=929 receive_seq=929 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997819 Octopus_Pro_H723_V1.1: temp=33.4 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5028 bytes_read=275431 bytes_retransmit=0 bytes_invalid=0 send_seq=838 receive_seq=838 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998876 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.23 cputime=25.666 memavail=3306980 print_time=814.030 buffer_time=0.204 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 803.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=16631 bytes_read=102456 bytes_retransmit=9 bytes_invalid=0 send_seq=1462 receive_seq=1462 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015947 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5520 bytes_read=19125 bytes_retransmit=0 bytes_invalid=0 send_seq=894 receive_seq=894 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999939 adj=49997876 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6090 bytes_read=93707 bytes_retransmit=9 bytes_invalid=0 send_seq=930 receive_seq=930 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000375 adj=63997813 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5034 bytes_read=275783 bytes_retransmit=0 bytes_invalid=0 send_seq=839 receive_seq=839 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998870 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.23 cputime=25.752 memavail=3306476 print_time=815.019 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Endstop y still triggered after retract
Endstop y still triggered after retract
Endstop y still triggered after retract
Stats 804.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=16801 bytes_read=102758 bytes_retransmit=9 bytes_invalid=0 send_seq=1474 receive_seq=1474 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015943 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5526 bytes_read=19141 bytes_retransmit=0 bytes_invalid=0 send_seq=895 receive_seq=895 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999936 adj=49997784 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6096 bytes_read=93824 bytes_retransmit=9 bytes_invalid=0 send_seq=931 receive_seq=931 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000374 adj=63997849 Octopus_Pro_H723_V1.1: temp=33.4 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5040 bytes_read=276139 bytes_retransmit=0 bytes_invalid=0 send_seq=840 receive_seq=840 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998868 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.23 cputime=25.788 memavail=3303072 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 805.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=16807 bytes_read=102858 bytes_retransmit=9 bytes_invalid=0 send_seq=1475 receive_seq=1475 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015942 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5532 bytes_read=19157 bytes_retransmit=0 bytes_invalid=0 send_seq=896 receive_seq=896 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999933 adj=49997781 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6102 bytes_read=93927 bytes_retransmit=9 bytes_invalid=0 send_seq=932 receive_seq=932 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000373 adj=63997842 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5046 bytes_read=276495 bytes_retransmit=0 bytes_invalid=0 send_seq=841 receive_seq=841 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998871 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.21 cputime=25.813 memavail=3302820 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 806.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=16813 bytes_read=102961 bytes_retransmit=9 bytes_invalid=0 send_seq=1476 receive_seq=1476 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015952 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5538 bytes_read=19173 bytes_retransmit=0 bytes_invalid=0 send_seq=897 receive_seq=897 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999929 adj=49997765 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6108 bytes_read=94059 bytes_retransmit=9 bytes_invalid=0 send_seq=933 receive_seq=933 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000372 adj=63997821 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5052 bytes_read=276851 bytes_retransmit=0 bytes_invalid=0 send_seq=842 receive_seq=842 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998873 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.21 cputime=25.839 memavail=3311668 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 807.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=16819 bytes_read=103093 bytes_retransmit=9 bytes_invalid=0 send_seq=1477 receive_seq=1477 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015952 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5544 bytes_read=19189 bytes_retransmit=0 bytes_invalid=0 send_seq=898 receive_seq=898 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999924 adj=49997731 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6114 bytes_read=94162 bytes_retransmit=9 bytes_invalid=0 send_seq=934 receive_seq=934 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000372 adj=63997785 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5058 bytes_read=277207 bytes_retransmit=0 bytes_invalid=0 send_seq=843 receive_seq=843 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000158 adj=31998871 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.21 cputime=25.864 memavail=3316208 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 808.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=16825 bytes_read=103210 bytes_retransmit=9 bytes_invalid=0 send_seq=1478 receive_seq=1478 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015949 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=5550 bytes_read=19218 bytes_retransmit=0 bytes_invalid=0 send_seq=899 receive_seq=899 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999920 adj=49997709 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6120 bytes_read=94265 bytes_retransmit=9 bytes_invalid=0 send_seq=935 receive_seq=935 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000371 adj=63997798 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5064 bytes_read=277563 bytes_retransmit=0 bytes_invalid=0 send_seq=844 receive_seq=844 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998888 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.21 cputime=25.889 memavail=3315972 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 809.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=16831 bytes_read=103313 bytes_retransmit=9 bytes_invalid=0 send_seq=1479 receive_seq=1479 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015945 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=5556 bytes_read=19234 bytes_retransmit=0 bytes_invalid=0 send_seq=900 receive_seq=900 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999915 adj=49997701 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6126 bytes_read=94411 bytes_retransmit=9 bytes_invalid=0 send_seq=936 receive_seq=936 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997799 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5070 bytes_read=277919 bytes_retransmit=0 bytes_invalid=0 send_seq=845 receive_seq=845 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998889 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.21 cputime=25.915 memavail=3314516 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 810.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=16837 bytes_read=103445 bytes_retransmit=9 bytes_invalid=0 send_seq=1480 receive_seq=1480 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015939 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=5562 bytes_read=19250 bytes_retransmit=0 bytes_invalid=0 send_seq=901 receive_seq=901 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999911 adj=49997691 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6132 bytes_read=94514 bytes_retransmit=9 bytes_invalid=0 send_seq=937 receive_seq=937 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997800 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5076 bytes_read=278275 bytes_retransmit=0 bytes_invalid=0 send_seq=846 receive_seq=846 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998891 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.19 cputime=25.939 memavail=3314516 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 811.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=16843 bytes_read=103548 bytes_retransmit=9 bytes_invalid=0 send_seq=1481 receive_seq=1481 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015952 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=5568 bytes_read=19266 bytes_retransmit=0 bytes_invalid=0 send_seq=902 receive_seq=902 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999909 adj=49997703 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6138 bytes_read=94617 bytes_retransmit=9 bytes_invalid=0 send_seq=938 receive_seq=938 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997807 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5082 bytes_read=278631 bytes_retransmit=0 bytes_invalid=0 send_seq=847 receive_seq=847 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998892 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.19 cputime=25.963 memavail=3314268 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 812.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=16849 bytes_read=103651 bytes_retransmit=9 bytes_invalid=0 send_seq=1482 receive_seq=1482 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015948 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=5574 bytes_read=19282 bytes_retransmit=0 bytes_invalid=0 send_seq=903 receive_seq=903 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999904 adj=49997687 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6144 bytes_read=94749 bytes_retransmit=9 bytes_invalid=0 send_seq=939 receive_seq=939 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997765 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5088 bytes_read=278987 bytes_retransmit=0 bytes_invalid=0 send_seq=848 receive_seq=848 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998869 coil_temp=21.7 refs=0 mcu_temp=24.33 supply_voltage=2.995 sysload=0.19 cputime=25.988 memavail=3314268 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 813.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16855 bytes_read=103797 bytes_retransmit=9 bytes_invalid=0 send_seq=1483 receive_seq=1483 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015943 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5580 bytes_read=19311 bytes_retransmit=0 bytes_invalid=0 send_seq=904 receive_seq=904 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999901 adj=49997684 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6150 bytes_read=94852 bytes_retransmit=9 bytes_invalid=0 send_seq=940 receive_seq=940 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997781 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5094 bytes_read=279343 bytes_retransmit=0 bytes_invalid=0 send_seq=849 receive_seq=849 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998878 coil_temp=21.7 refs=0 mcu_temp=24.33 supply_voltage=2.995 sysload=0.19 cputime=26.013 memavail=3313048 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 814.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16861 bytes_read=103900 bytes_retransmit=9 bytes_invalid=0 send_seq=1484 receive_seq=1484 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015942 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5586 bytes_read=19327 bytes_retransmit=0 bytes_invalid=0 send_seq=905 receive_seq=905 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999896 adj=49997692 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6156 bytes_read=94969 bytes_retransmit=9 bytes_invalid=0 send_seq=941 receive_seq=941 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000384 adj=63997799 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5100 bytes_read=279699 bytes_retransmit=0 bytes_invalid=0 send_seq=850 receive_seq=850 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000158 adj=31998880 coil_temp=21.7 refs=0 mcu_temp=24.34 supply_voltage=2.995 sysload=0.19 cputime=26.038 memavail=3303032 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 815.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16867 bytes_read=104001 bytes_retransmit=9 bytes_invalid=0 send_seq=1485 receive_seq=1485 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015938 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5592 bytes_read=19343 bytes_retransmit=0 bytes_invalid=0 send_seq=906 receive_seq=906 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999893 adj=49997682 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6162 bytes_read=95101 bytes_retransmit=9 bytes_invalid=0 send_seq=942 receive_seq=942 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000385 adj=63998063 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5106 bytes_read=280055 bytes_retransmit=0 bytes_invalid=0 send_seq=851 receive_seq=851 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998911 coil_temp=21.7 refs=0 mcu_temp=24.33 supply_voltage=2.995 sysload=0.18 cputime=26.063 memavail=3302028 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 816.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16873 bytes_read=104130 bytes_retransmit=9 bytes_invalid=0 send_seq=1486 receive_seq=1486 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015934 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5598 bytes_read=19359 bytes_retransmit=0 bytes_invalid=0 send_seq=907 receive_seq=907 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999891 adj=49997687 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6168 bytes_read=95204 bytes_retransmit=9 bytes_invalid=0 send_seq=943 receive_seq=943 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000383 adj=63998019 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5112 bytes_read=280411 bytes_retransmit=0 bytes_invalid=0 send_seq=852 receive_seq=852 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998895 coil_temp=21.7 refs=0 mcu_temp=24.34 supply_voltage=2.995 sysload=0.18 cputime=26.085 memavail=3305728 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 817.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16879 bytes_read=104233 bytes_retransmit=9 bytes_invalid=0 send_seq=1487 receive_seq=1487 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015932 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000012 bytes_write=5604 bytes_read=19375 bytes_retransmit=0 bytes_invalid=0 send_seq=908 receive_seq=908 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999889 adj=49997722 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6174 bytes_read=95307 bytes_retransmit=9 bytes_invalid=0 send_seq=944 receive_seq=944 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000382 adj=63997955 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5118 bytes_read=280751 bytes_retransmit=0 bytes_invalid=0 send_seq=853 receive_seq=853 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998895 coil_temp=21.7 refs=0 mcu_temp=24.34 supply_voltage=2.995 sysload=0.18 cputime=26.108 memavail=3319884 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 818.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16885 bytes_read=104350 bytes_retransmit=9 bytes_invalid=0 send_seq=1488 receive_seq=1488 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015932 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5610 bytes_read=19404 bytes_retransmit=0 bytes_invalid=0 send_seq=909 receive_seq=909 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999890 adj=49997737 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6180 bytes_read=95439 bytes_retransmit=9 bytes_invalid=0 send_seq=945 receive_seq=945 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000381 adj=63997909 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5124 bytes_read=281107 bytes_retransmit=0 bytes_invalid=0 send_seq=854 receive_seq=854 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998881 coil_temp=21.7 refs=0 mcu_temp=24.33 supply_voltage=2.995 sysload=0.18 cputime=26.132 memavail=3319892 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.4 pwm=0.000
Stats 819.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16891 bytes_read=104482 bytes_retransmit=9 bytes_invalid=0 send_seq=1489 receive_seq=1489 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015938 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5616 bytes_read=19420 bytes_retransmit=0 bytes_invalid=0 send_seq=910 receive_seq=910 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999890 adj=49997798 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6186 bytes_read=95556 bytes_retransmit=9 bytes_invalid=0 send_seq=946 receive_seq=946 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000380 adj=63997873 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5130 bytes_read=281463 bytes_retransmit=0 bytes_invalid=0 send_seq=855 receive_seq=855 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998875 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.18 cputime=26.157 memavail=3318464 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 820.7: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16897 bytes_read=104585 bytes_retransmit=9 bytes_invalid=0 send_seq=1490 receive_seq=1490 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015941 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5622 bytes_read=19436 bytes_retransmit=0 bytes_invalid=0 send_seq=911 receive_seq=911 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999887 adj=49997817 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6192 bytes_read=95659 bytes_retransmit=9 bytes_invalid=0 send_seq=947 receive_seq=947 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000379 adj=63997834 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5136 bytes_read=281819 bytes_retransmit=0 bytes_invalid=0 send_seq=856 receive_seq=856 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998866 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.16 cputime=26.181 memavail=3318464 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 821.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16903 bytes_read=104688 bytes_retransmit=9 bytes_invalid=0 send_seq=1491 receive_seq=1491 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015940 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5628 bytes_read=19452 bytes_retransmit=0 bytes_invalid=0 send_seq=912 receive_seq=912 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999883 adj=49997778 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6198 bytes_read=95791 bytes_retransmit=9 bytes_invalid=0 send_seq=948 receive_seq=948 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000377 adj=63997814 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5142 bytes_read=282175 bytes_retransmit=0 bytes_invalid=0 send_seq=857 receive_seq=857 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998856 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.16 cputime=26.205 memavail=3318464 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 822.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16909 bytes_read=104820 bytes_retransmit=9 bytes_invalid=0 send_seq=1492 receive_seq=1492 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015937 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5634 bytes_read=19468 bytes_retransmit=0 bytes_invalid=0 send_seq=913 receive_seq=913 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999880 adj=49997749 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6204 bytes_read=95894 bytes_retransmit=9 bytes_invalid=0 send_seq=949 receive_seq=949 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000377 adj=63997796 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5148 bytes_read=282531 bytes_retransmit=0 bytes_invalid=0 send_seq=858 receive_seq=858 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998891 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.16 cputime=26.229 memavail=3318464 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 823.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16915 bytes_read=104937 bytes_retransmit=9 bytes_invalid=0 send_seq=1493 receive_seq=1493 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015934 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5640 bytes_read=19497 bytes_retransmit=0 bytes_invalid=0 send_seq=914 receive_seq=914 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999876 adj=49997742 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6210 bytes_read=95997 bytes_retransmit=9 bytes_invalid=0 send_seq=950 receive_seq=950 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000380 adj=63997810 Octopus_Pro_H723_V1.1: temp=33.8 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5154 bytes_read=282887 bytes_retransmit=0 bytes_invalid=0 send_seq=859 receive_seq=859 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998888 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.16 cputime=26.254 memavail=3316996 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 824.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16921 bytes_read=105040 bytes_retransmit=9 bytes_invalid=0 send_seq=1494 receive_seq=1494 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015931 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5646 bytes_read=19513 bytes_retransmit=0 bytes_invalid=0 send_seq=915 receive_seq=915 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999873 adj=49997721 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6216 bytes_read=96143 bytes_retransmit=9 bytes_invalid=0 send_seq=951 receive_seq=951 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000378 adj=63997861 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5160 bytes_read=283243 bytes_retransmit=0 bytes_invalid=0 send_seq=860 receive_seq=860 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998889 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.16 cputime=26.278 memavail=3316324 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 825.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16927 bytes_read=105172 bytes_retransmit=9 bytes_invalid=0 send_seq=1495 receive_seq=1495 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015930 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5652 bytes_read=19529 bytes_retransmit=0 bytes_invalid=0 send_seq=916 receive_seq=916 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999869 adj=49997718 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6222 bytes_read=96246 bytes_retransmit=9 bytes_invalid=0 send_seq=952 receive_seq=952 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000377 adj=63997839 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5166 bytes_read=283599 bytes_retransmit=0 bytes_invalid=0 send_seq=861 receive_seq=861 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998887 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.15 cputime=26.303 memavail=3316328 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 826.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16933 bytes_read=105269 bytes_retransmit=9 bytes_invalid=0 send_seq=1496 receive_seq=1496 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015926 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5658 bytes_read=19545 bytes_retransmit=0 bytes_invalid=0 send_seq=917 receive_seq=917 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999865 adj=49997694 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6228 bytes_read=96349 bytes_retransmit=9 bytes_invalid=0 send_seq=953 receive_seq=953 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000377 adj=63997825 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5172 bytes_read=283955 bytes_retransmit=0 bytes_invalid=0 send_seq=862 receive_seq=862 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998887 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.15 cputime=26.328 memavail=3316328 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 827.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16939 bytes_read=105371 bytes_retransmit=9 bytes_invalid=0 send_seq=1497 receive_seq=1497 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015922 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5664 bytes_read=19561 bytes_retransmit=0 bytes_invalid=0 send_seq=918 receive_seq=918 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999862 adj=49997686 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6234 bytes_read=96481 bytes_retransmit=9 bytes_invalid=0 send_seq=954 receive_seq=954 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000379 adj=63997835 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5178 bytes_read=284311 bytes_retransmit=0 bytes_invalid=0 send_seq=863 receive_seq=863 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998882 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.15 cputime=26.351 memavail=3316328 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 828.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16945 bytes_read=105517 bytes_retransmit=9 bytes_invalid=0 send_seq=1498 receive_seq=1498 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015931 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000016 bytes_write=5670 bytes_read=19590 bytes_retransmit=0 bytes_invalid=0 send_seq=919 receive_seq=919 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999860 adj=49997695 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6240 bytes_read=96584 bytes_retransmit=9 bytes_invalid=0 send_seq=955 receive_seq=955 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000378 adj=63997866 Octopus_Pro_H723_V1.1: temp=33.8 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5184 bytes_read=284667 bytes_retransmit=0 bytes_invalid=0 send_seq=864 receive_seq=864 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998885 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.15 cputime=26.376 memavail=3316328 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 829.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16951 bytes_read=105620 bytes_retransmit=9 bytes_invalid=0 send_seq=1499 receive_seq=1499 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015933 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000016 bytes_write=5676 bytes_read=19606 bytes_retransmit=0 bytes_invalid=0 send_seq=920 receive_seq=920 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999865 adj=49997692 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6246 bytes_read=96701 bytes_retransmit=9 bytes_invalid=0 send_seq=956 receive_seq=956 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000377 adj=63997815 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5190 bytes_read=285023 bytes_retransmit=0 bytes_invalid=0 send_seq=865 receive_seq=865 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998869 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.15 cputime=26.400 memavail=3316336 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 830.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16957 bytes_read=105723 bytes_retransmit=9 bytes_invalid=0 send_seq=1500 receive_seq=1500 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015930 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000016 bytes_write=5682 bytes_read=19622 bytes_retransmit=0 bytes_invalid=0 send_seq=921 receive_seq=921 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999868 adj=49997821 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6252 bytes_read=96833 bytes_retransmit=9 bytes_invalid=0 send_seq=957 receive_seq=957 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000376 adj=63997806 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5196 bytes_read=285379 bytes_retransmit=0 bytes_invalid=0 send_seq=866 receive_seq=866 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998862 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.14 cputime=26.424 memavail=3316336 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 831.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16963 bytes_read=105855 bytes_retransmit=9 bytes_invalid=0 send_seq=1501 receive_seq=1501 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015929 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000016 bytes_write=5688 bytes_read=19638 bytes_retransmit=0 bytes_invalid=0 send_seq=922 receive_seq=922 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999869 adj=49997871 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6258 bytes_read=96936 bytes_retransmit=9 bytes_invalid=0 send_seq=958 receive_seq=958 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000375 adj=63997797 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5202 bytes_read=285735 bytes_retransmit=0 bytes_invalid=0 send_seq=867 receive_seq=867 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998873 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.14 cputime=26.447 memavail=3316336 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 832.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16969 bytes_read=105958 bytes_retransmit=9 bytes_invalid=0 send_seq=1502 receive_seq=1502 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015928 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000016 bytes_write=5694 bytes_read=19654 bytes_retransmit=0 bytes_invalid=0 send_seq=923 receive_seq=923 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999870 adj=49997890 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6264 bytes_read=97039 bytes_retransmit=9 bytes_invalid=0 send_seq=959 receive_seq=959 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000373 adj=63997789 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5208 bytes_read=286091 bytes_retransmit=0 bytes_invalid=0 send_seq=868 receive_seq=868 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998899 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.14 cputime=26.471 memavail=3316336 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 833.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16975 bytes_read=106075 bytes_retransmit=9 bytes_invalid=0 send_seq=1503 receive_seq=1503 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015928 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5700 bytes_read=19683 bytes_retransmit=0 bytes_invalid=0 send_seq=924 receive_seq=924 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999870 adj=49997909 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6270 bytes_read=97171 bytes_retransmit=9 bytes_invalid=0 send_seq=960 receive_seq=960 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000375 adj=63997783 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5214 bytes_read=286447 bytes_retransmit=0 bytes_invalid=0 send_seq=869 receive_seq=869 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998904 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.14 cputime=26.496 memavail=3316084 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 834.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=16981 bytes_read=106207 bytes_retransmit=9 bytes_invalid=0 send_seq=1504 receive_seq=1504 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015925 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5706 bytes_read=19699 bytes_retransmit=0 bytes_invalid=0 send_seq=925 receive_seq=925 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999869 adj=49997904 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6276 bytes_read=97288 bytes_retransmit=9 bytes_invalid=0 send_seq=961 receive_seq=961 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000375 adj=63997821 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5220 bytes_read=286803 bytes_retransmit=0 bytes_invalid=0 send_seq=870 receive_seq=870 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998893 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.14 cputime=26.520 memavail=3316084 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 835.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17000 bytes_read=106315 bytes_retransmit=9 bytes_invalid=0 send_seq=1506 receive_seq=1506 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015921 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5712 bytes_read=19715 bytes_retransmit=0 bytes_invalid=0 send_seq=926 receive_seq=926 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999868 adj=49997882 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6282 bytes_read=97391 bytes_retransmit=9 bytes_invalid=0 send_seq=962 receive_seq=962 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000374 adj=63997831 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5226 bytes_read=287159 bytes_retransmit=0 bytes_invalid=0 send_seq=871 receive_seq=871 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998884 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.13 cputime=26.544 memavail=3316092 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 836.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17006 bytes_read=106418 bytes_retransmit=9 bytes_invalid=0 send_seq=1507 receive_seq=1507 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015930 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5718 bytes_read=19731 bytes_retransmit=0 bytes_invalid=0 send_seq=927 receive_seq=927 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999867 adj=49997883 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6288 bytes_read=97523 bytes_retransmit=9 bytes_invalid=0 send_seq=963 receive_seq=963 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000373 adj=63997822 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5232 bytes_read=287515 bytes_retransmit=0 bytes_invalid=0 send_seq=872 receive_seq=872 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998878 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.13 cputime=26.569 memavail=3316092 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 837.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17018 bytes_read=106562 bytes_retransmit=9 bytes_invalid=0 send_seq=1509 receive_seq=1509 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015927 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5730 bytes_read=19763 bytes_retransmit=0 bytes_invalid=0 send_seq=929 receive_seq=929 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999860 adj=49997838 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6300 bytes_read=97642 bytes_retransmit=9 bytes_invalid=0 send_seq=965 receive_seq=965 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000374 adj=63997784 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5244 bytes_read=287887 bytes_retransmit=0 bytes_invalid=0 send_seq=874 receive_seq=874 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998864 coil_temp=21.7 refs=0 mcu_temp=24.30 supply_voltage=2.995 sysload=0.13 cputime=26.594 memavail=3316092 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 838.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17024 bytes_read=106679 bytes_retransmit=9 bytes_invalid=0 send_seq=1510 receive_seq=1510 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015925 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5736 bytes_read=19792 bytes_retransmit=0 bytes_invalid=0 send_seq=930 receive_seq=930 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999857 adj=49997747 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6306 bytes_read=97745 bytes_retransmit=9 bytes_invalid=0 send_seq=966 receive_seq=966 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000373 adj=63997826 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5250 bytes_read=288243 bytes_retransmit=0 bytes_invalid=0 send_seq=875 receive_seq=875 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998864 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.13 cputime=26.618 memavail=3315848 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 839.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17030 bytes_read=106782 bytes_retransmit=9 bytes_invalid=0 send_seq=1511 receive_seq=1511 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015922 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5742 bytes_read=19808 bytes_retransmit=0 bytes_invalid=0 send_seq=931 receive_seq=931 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999852 adj=49997735 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6312 bytes_read=97891 bytes_retransmit=9 bytes_invalid=0 send_seq=967 receive_seq=967 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000373 adj=63997812 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5256 bytes_read=288599 bytes_retransmit=0 bytes_invalid=0 send_seq=876 receive_seq=876 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998870 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.13 cputime=26.643 memavail=3315624 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 840.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17036 bytes_read=106914 bytes_retransmit=9 bytes_invalid=0 send_seq=1512 receive_seq=1512 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015917 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5748 bytes_read=19824 bytes_retransmit=0 bytes_invalid=0 send_seq=932 receive_seq=932 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999853 adj=49997707 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6318 bytes_read=97994 bytes_retransmit=9 bytes_invalid=0 send_seq=968 receive_seq=968 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000372 adj=63997816 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=55.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5262 bytes_read=288955 bytes_retransmit=0 bytes_invalid=0 send_seq=877 receive_seq=877 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998876 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.12 cputime=26.667 memavail=3315624 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 841.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17042 bytes_read=107017 bytes_retransmit=9 bytes_invalid=0 send_seq=1513 receive_seq=1513 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015914 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5754 bytes_read=19840 bytes_retransmit=0 bytes_invalid=0 send_seq=933 receive_seq=933 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999857 adj=49997772 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6324 bytes_read=98097 bytes_retransmit=9 bytes_invalid=0 send_seq=969 receive_seq=969 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000371 adj=63997811 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5268 bytes_read=289311 bytes_retransmit=0 bytes_invalid=0 send_seq=878 receive_seq=878 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998875 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.12 cputime=26.691 memavail=3315624 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 842.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17048 bytes_read=107120 bytes_retransmit=9 bytes_invalid=0 send_seq=1514 receive_seq=1514 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015917 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5760 bytes_read=19856 bytes_retransmit=0 bytes_invalid=0 send_seq=934 receive_seq=934 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999861 adj=49997849 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6330 bytes_read=98229 bytes_retransmit=9 bytes_invalid=0 send_seq=970 receive_seq=970 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997806 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5274 bytes_read=289667 bytes_retransmit=0 bytes_invalid=0 send_seq=879 receive_seq=879 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998877 coil_temp=21.7 refs=0 mcu_temp=24.33 supply_voltage=2.995 sysload=0.12 cputime=26.715 memavail=3315772 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 843.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17054 bytes_read=107252 bytes_retransmit=9 bytes_invalid=0 send_seq=1515 receive_seq=1515 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015938 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5766 bytes_read=19885 bytes_retransmit=0 bytes_invalid=0 send_seq=935 receive_seq=935 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999861 adj=49997915 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6336 bytes_read=98332 bytes_retransmit=9 bytes_invalid=0 send_seq=971 receive_seq=971 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997792 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5280 bytes_read=290023 bytes_retransmit=0 bytes_invalid=0 send_seq=880 receive_seq=880 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998877 coil_temp=21.7 refs=0 mcu_temp=24.34 supply_voltage=2.995 sysload=0.12 cputime=26.740 memavail=3316136 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 844.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17060 bytes_read=107369 bytes_retransmit=9 bytes_invalid=0 send_seq=1516 receive_seq=1516 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015962 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5772 bytes_read=19901 bytes_retransmit=0 bytes_invalid=0 send_seq=936 receive_seq=936 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999859 adj=49997863 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6342 bytes_read=98449 bytes_retransmit=9 bytes_invalid=0 send_seq=972 receive_seq=972 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997731 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5286 bytes_read=290379 bytes_retransmit=0 bytes_invalid=0 send_seq=881 receive_seq=881 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998849 coil_temp=21.7 refs=0 mcu_temp=24.33 supply_voltage=2.995 sysload=0.12 cputime=26.765 memavail=3315212 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 845.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17066 bytes_read=107472 bytes_retransmit=9 bytes_invalid=0 send_seq=1517 receive_seq=1517 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015966 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5778 bytes_read=19917 bytes_retransmit=0 bytes_invalid=0 send_seq=937 receive_seq=937 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999854 adj=49997785 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6348 bytes_read=98581 bytes_retransmit=9 bytes_invalid=0 send_seq=973 receive_seq=973 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997683 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5292 bytes_read=290735 bytes_retransmit=0 bytes_invalid=0 send_seq=882 receive_seq=882 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998824 coil_temp=21.7 refs=0 mcu_temp=24.33 supply_voltage=2.995 sysload=0.11 cputime=26.789 memavail=3315216 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 846.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17072 bytes_read=107604 bytes_retransmit=9 bytes_invalid=0 send_seq=1518 receive_seq=1518 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015964 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5784 bytes_read=19933 bytes_retransmit=0 bytes_invalid=0 send_seq=938 receive_seq=938 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999849 adj=49997723 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6354 bytes_read=98684 bytes_retransmit=9 bytes_invalid=0 send_seq=974 receive_seq=974 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997707 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5298 bytes_read=291091 bytes_retransmit=0 bytes_invalid=0 send_seq=883 receive_seq=883 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998833 coil_temp=21.7 refs=0 mcu_temp=24.33 supply_voltage=2.995 sysload=0.11 cputime=26.813 memavail=3315216 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 847.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17078 bytes_read=107705 bytes_retransmit=9 bytes_invalid=0 send_seq=1519 receive_seq=1519 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015972 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=5790 bytes_read=19949 bytes_retransmit=0 bytes_invalid=0 send_seq=939 receive_seq=939 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999847 adj=49997683 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6360 bytes_read=98787 bytes_retransmit=9 bytes_invalid=0 send_seq=975 receive_seq=975 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997739 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5304 bytes_read=291447 bytes_retransmit=0 bytes_invalid=0 send_seq=884 receive_seq=884 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998846 coil_temp=21.7 refs=0 mcu_temp=24.34 supply_voltage=2.995 sysload=0.11 cputime=26.838 memavail=3315956 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 848.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17084 bytes_read=107806 bytes_retransmit=9 bytes_invalid=0 send_seq=1520 receive_seq=1520 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015968 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=5796 bytes_read=19978 bytes_retransmit=0 bytes_invalid=0 send_seq=940 receive_seq=940 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999843 adj=49997684 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6366 bytes_read=98919 bytes_retransmit=9 bytes_invalid=0 send_seq=976 receive_seq=976 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997744 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5310 bytes_read=291803 bytes_retransmit=0 bytes_invalid=0 send_seq=885 receive_seq=885 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000153 adj=31998843 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.11 cputime=26.862 memavail=3315972 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 849.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17090 bytes_read=107952 bytes_retransmit=9 bytes_invalid=0 send_seq=1521 receive_seq=1521 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015963 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=5802 bytes_read=19994 bytes_retransmit=0 bytes_invalid=0 send_seq=941 receive_seq=941 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999846 adj=49997666 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6372 bytes_read=99036 bytes_retransmit=9 bytes_invalid=0 send_seq=977 receive_seq=977 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000367 adj=63997757 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5316 bytes_read=292159 bytes_retransmit=0 bytes_invalid=0 send_seq=886 receive_seq=886 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000153 adj=31998855 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.11 cputime=26.887 memavail=3314964 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 850.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17096 bytes_read=108055 bytes_retransmit=9 bytes_invalid=0 send_seq=1522 receive_seq=1522 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015958 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=5808 bytes_read=20010 bytes_retransmit=0 bytes_invalid=0 send_seq=942 receive_seq=942 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999848 adj=49997771 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6378 bytes_read=99139 bytes_retransmit=9 bytes_invalid=0 send_seq=978 receive_seq=978 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000366 adj=63997770 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=56.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5322 bytes_read=292515 bytes_retransmit=0 bytes_invalid=0 send_seq=887 receive_seq=887 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998859 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.10 cputime=26.910 memavail=3314964 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 851.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17102 bytes_read=108158 bytes_retransmit=9 bytes_invalid=0 send_seq=1523 receive_seq=1523 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015956 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=5814 bytes_read=20026 bytes_retransmit=0 bytes_invalid=0 send_seq=943 receive_seq=943 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999842 adj=49997826 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6384 bytes_read=99271 bytes_retransmit=9 bytes_invalid=0 send_seq=979 receive_seq=979 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997777 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5328 bytes_read=292871 bytes_retransmit=0 bytes_invalid=0 send_seq=888 receive_seq=888 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998862 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.10 cputime=27.002 memavail=3314964 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 852.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17108 bytes_read=108290 bytes_retransmit=9 bytes_invalid=0 send_seq=1524 receive_seq=1524 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015949 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=5820 bytes_read=20042 bytes_retransmit=0 bytes_invalid=0 send_seq=944 receive_seq=944 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999838 adj=49997753 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6390 bytes_read=99374 bytes_retransmit=9 bytes_invalid=0 send_seq=980 receive_seq=980 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000364 adj=63997782 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5334 bytes_read=293227 bytes_retransmit=0 bytes_invalid=0 send_seq=889 receive_seq=889 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998863 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.10 cputime=27.026 memavail=3314976 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.5 pwm=0.000
Stats 853.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17114 bytes_read=108393 bytes_retransmit=9 bytes_invalid=0 send_seq=1525 receive_seq=1525 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015944 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5826 bytes_read=20071 bytes_retransmit=0 bytes_invalid=0 send_seq=945 receive_seq=945 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999832 adj=49997716 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6396 bytes_read=99477 bytes_retransmit=9 bytes_invalid=0 send_seq=981 receive_seq=981 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997794 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5340 bytes_read=293583 bytes_retransmit=0 bytes_invalid=0 send_seq=890 receive_seq=890 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998867 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.10 cputime=27.050 memavail=3314976 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 854.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17120 bytes_read=108510 bytes_retransmit=9 bytes_invalid=0 send_seq=1526 receive_seq=1526 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015941 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5832 bytes_read=20087 bytes_retransmit=0 bytes_invalid=0 send_seq=946 receive_seq=946 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999831 adj=49997677 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6402 bytes_read=99623 bytes_retransmit=9 bytes_invalid=0 send_seq=982 receive_seq=982 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997879 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5346 bytes_read=293939 bytes_retransmit=0 bytes_invalid=0 send_seq=891 receive_seq=891 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998882 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.10 cputime=27.074 memavail=3313772 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 855.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17126 bytes_read=108642 bytes_retransmit=9 bytes_invalid=0 send_seq=1527 receive_seq=1527 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015942 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5838 bytes_read=20103 bytes_retransmit=0 bytes_invalid=0 send_seq=947 receive_seq=947 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999833 adj=49997703 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6408 bytes_read=99726 bytes_retransmit=9 bytes_invalid=0 send_seq=983 receive_seq=983 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997863 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5352 bytes_read=294295 bytes_retransmit=0 bytes_invalid=0 send_seq=892 receive_seq=892 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998888 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.09 cputime=27.099 memavail=3313760 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 856.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17132 bytes_read=108745 bytes_retransmit=9 bytes_invalid=0 send_seq=1528 receive_seq=1528 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015949 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5844 bytes_read=20119 bytes_retransmit=0 bytes_invalid=0 send_seq=948 receive_seq=948 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999829 adj=49997766 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6414 bytes_read=99829 bytes_retransmit=9 bytes_invalid=0 send_seq=984 receive_seq=984 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997853 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5358 bytes_read=294651 bytes_retransmit=0 bytes_invalid=0 send_seq=893 receive_seq=893 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998878 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.09 cputime=27.123 memavail=3313760 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 857.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17138 bytes_read=108848 bytes_retransmit=9 bytes_invalid=0 send_seq=1529 receive_seq=1529 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015947 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5850 bytes_read=20135 bytes_retransmit=0 bytes_invalid=0 send_seq=949 receive_seq=949 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999825 adj=49997704 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6420 bytes_read=99961 bytes_retransmit=9 bytes_invalid=0 send_seq=985 receive_seq=985 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997831 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5364 bytes_read=295007 bytes_retransmit=0 bytes_invalid=0 send_seq=894 receive_seq=894 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998874 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.09 cputime=27.147 memavail=3313908 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 858.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17144 bytes_read=108976 bytes_retransmit=9 bytes_invalid=0 send_seq=1530 receive_seq=1530 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015947 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=5856 bytes_read=20151 bytes_retransmit=0 bytes_invalid=0 send_seq=950 receive_seq=950 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999820 adj=49997679 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=6426 bytes_read=100064 bytes_retransmit=9 bytes_invalid=0 send_seq=986 receive_seq=986 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997840 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5370 bytes_read=295363 bytes_retransmit=0 bytes_invalid=0 send_seq=895 receive_seq=895 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998872 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.09 cputime=27.171 memavail=3314012 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 859.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17150 bytes_read=109093 bytes_retransmit=9 bytes_invalid=0 send_seq=1531 receive_seq=1531 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015942 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5862 bytes_read=20180 bytes_retransmit=0 bytes_invalid=0 send_seq=951 receive_seq=951 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999816 adj=49997651 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6432 bytes_read=100181 bytes_retransmit=9 bytes_invalid=0 send_seq=987 receive_seq=987 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997844 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5376 bytes_read=295719 bytes_retransmit=0 bytes_invalid=0 send_seq=896 receive_seq=896 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998869 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.09 cputime=27.196 memavail=3314012 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 860.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17156 bytes_read=109196 bytes_retransmit=9 bytes_invalid=0 send_seq=1532 receive_seq=1532 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015952 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5868 bytes_read=20196 bytes_retransmit=0 bytes_invalid=0 send_seq=952 receive_seq=952 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999816 adj=49997636 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6438 bytes_read=100305 bytes_retransmit=9 bytes_invalid=0 send_seq=988 receive_seq=988 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997834 Octopus_Pro_H723_V1.1: temp=33.6 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5382 bytes_read=296075 bytes_retransmit=0 bytes_invalid=0 send_seq=897 receive_seq=897 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998881 coil_temp=21.6 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.08 cputime=27.221 memavail=3314016 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 861.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17162 bytes_read=109328 bytes_retransmit=9 bytes_invalid=0 send_seq=1533 receive_seq=1533 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015947 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5874 bytes_read=20212 bytes_retransmit=0 bytes_invalid=0 send_seq=953 receive_seq=953 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999813 adj=49997667 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6444 bytes_read=100401 bytes_retransmit=9 bytes_invalid=0 send_seq=989 receive_seq=989 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997810 Octopus_Pro_H723_V1.1: temp=33.7 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5388 bytes_read=296431 bytes_retransmit=0 bytes_invalid=0 send_seq=898 receive_seq=898 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998867 coil_temp=21.7 refs=0 mcu_temp=24.31 supply_voltage=2.995 sysload=0.08 cputime=27.246 memavail=3314016 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 862.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17168 bytes_read=109431 bytes_retransmit=9 bytes_invalid=0 send_seq=1534 receive_seq=1534 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015947 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5880 bytes_read=20228 bytes_retransmit=0 bytes_invalid=0 send_seq=954 receive_seq=954 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999809 adj=49997658 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6450 bytes_read=100497 bytes_retransmit=9 bytes_invalid=0 send_seq=990 receive_seq=990 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997830 Octopus_Pro_H723_V1.1: temp=33.8 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5394 bytes_read=296787 bytes_retransmit=0 bytes_invalid=0 send_seq=899 receive_seq=899 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998880 coil_temp=21.7 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.08 cputime=27.270 memavail=3314756 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.6 pwm=0.000
Stats 863.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=17174 bytes_read=109534 bytes_retransmit=9 bytes_invalid=0 send_seq=1535 receive_seq=1535 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015942 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=5886 bytes_read=20244 bytes_retransmit=0 bytes_invalid=0 send_seq=955 receive_seq=955 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999806 adj=49997641 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=6456 bytes_read=100620 bytes_retransmit=9 bytes_invalid=0 send_seq=991 receive_seq=991 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997840 Octopus_Pro_H723_V1.1: temp=33.5 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=5400 bytes_read=297143 bytes_retransmit=0 bytes_invalid=0 send_seq=900 receive_seq=900 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998917 coil_temp=21.7 refs=0 mcu_temp=24.33 supply_voltage=2.995 sysload=0.08 cputime=27.294 memavail=3313544 print_time=815.519 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 1645.1: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=21938 bytes_read=199569 bytes_retransmit=9 bytes_invalid=0 send_seq=2329 receive_seq=2329 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015800 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=10650 bytes_read=34907 bytes_retransmit=0 bytes_invalid=0 send_seq=1749 receive_seq=1749 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999609 adj=49997604 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=11220 bytes_read=190638 bytes_retransmit=9 bytes_invalid=0 send_seq=1785 receive_seq=1785 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997749 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=10164 bytes_read=574672 bytes_retransmit=0 bytes_invalid=0 send_seq=1694 receive_seq=1694 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000154 adj=31998889 coil_temp=21.8 refs=0 mcu_temp=24.34 supply_voltage=2.995 sysload=0.16 cputime=46.300 memavail=3317204 print_time=1657.019 buffer_time=0.796 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Attempting MCU 'mcu' reset command
Attempting MCU 'rpi' config_reset command
b'Got EOF when reading from device'
Attempting MCU 'toolboard_t0' reset command
Attempting MCU 'beacon' reset command
webhooks client 3932121120: Disconnected
Restarting printer
Start printer at Mon Feb 16 01:56:17 2026 (1771206977.4 1647.1)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-pro-h723-11]
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=PG13,
z1_step_pin=PE2,
z1_dir_pin=PE3,
z1_enable_pin=PD4,
z1_uart_pin=PE1,
z1_diag_pin=PG14,
z2_step_pin=PE6,
z2_dir_pin=PA14,
z2_enable_pin=PE0,
z2_uart_pin=PD3,
z2_diag_pin=PG15,
z3_step_pin=PF9,
z3_dir_pin=PF10,
z3_enable_pin=PG2,
z3_uart_pin=PF2,
z3_diag_pin=PG12,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
e_power_draw_pin=null,
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,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PG15,
filament_sensor_motion_pin=PG14,
ratrig_vaoc_probe_pin=PG10,
ratrig_vaoc_led_pin=PB0,
ratrig_vaoc_fan_pin=PD13,
chamber_lighting_pin=PB11,
chamber_filter_4p_fan_pin=PD14,
chamber_filter_4p_fan_enable_pin=PD15
[mcu]
serial = /dev/RatOS/btt-octopus-pro-h723-11
[temperature_sensor Octopus_Pro_H723_V1.1]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_software_mosi_pin = PB5
spi_software_miso_pin = PB4
spi_software_sclk_pin = PB3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD3,
e_dir_pin=PD2,
e_enable_pin=PB6,
e_uart_pin=PB3,
e_heater_pin=PB0,
e_sensor_pin=PA1,
e_power_draw_pin=null,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB1,
bltouch_sensor_pin=PA5,
bltouch_control_pin=PA4,
probe_pin=PA5,
fan_part_cooling_pin=PB8,
fan_toolhead_cooling_pin=PB4,
fan_controller_board_pin=null,
heater_bed_heating_pin=null,
heater_bed_sensor_pin=null,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PA3,
filament_sensor_motion_pin=PA9,
ratrig_vaoc_probe_pin=null,
ratrig_vaoc_led_pin=null,
ratrig_vaoc_fan_pin=null,
chamber_lighting_pin=null,
chamber_filter_4p_fan_pin=null,
chamber_filter_4p_fan_enable_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-gen2-10-t0
[temperature_sensor EBB42_Gen2_v1.0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[lis2dw toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB1
spi_software_mosi_pin = toolboard_t0:PB11
spi_software_miso_pin = toolboard_t0:PB2
spi_software_sclk_pin = toolboard_t0:PB10
[gcode_macro RatOS]
variable_homing = "endstops"
variable_z_probe = "static"
variable_sensorless_x_current = 0.6
variable_sensorless_y_current = 0.9
variable_safe_home_x = "middle"
variable_safe_home_y = "middle"
variable_driver_type_x = "tmc2209"
variable_driver_type_y = "tmc2209"
variable_stowable_probe_stop_on_error = False
variable_chamber_filter_enable = True
variable_chamber_filter_speed = 0.5
variable_chamber_filter_disable_speed = 1.0
variable_chamber_filter_enable_at = "after_print_start"
variable_chamber_filter_disable_period = 300
variable_chamber_filter_disable_bed_temp = 0
variable_chamber_heater_enable = True
variable_chamber_heater_bed_temp = 115
variable_chamber_heater_preheating_temp = 150
variable_chamber_heater_heating_temp_offset = 25
variable_chamber_heater_control_external_heater = False
variable_chamber_heater_air_circulation_enable = True
variable_chamber_heater_air_circulation_fan_speed = 0.35
variable_chamber_heater_air_circulation_y_pos = 0
variable_chamber_heater_air_circulation_z_pos = 100
variable_chamber_heater_extra_fan_speed = 1.0
variable_chamber_heater_filter_fan_speed = 1.0
variable_led_status_action = 0.0,1.0,1.0
variable_led_status_success = 0.0,1.0,0.0
variable_led_status_error = 1.0,0.0,1.0
variable_led_status_on = 1.0,1.0,1.0
variable_led_status_off = 0.0,0.0,1.0
variable_led_status_standby = 0.1,0.1,0.1
variable_led_status_heating = 1.0,0.0,0.0
variable_led_status_cooling = 0.0,0.0,1.0
variable_calibrate_bed_mesh = True
variable_adaptive_mesh = True
variable_start_print_park_in = "front"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "front"
variable_end_print_park_z_hop = 20
variable_nozzle_priming = "primeblob"
variable_nozzle_prime_start_x = "max"
variable_nozzle_prime_start_y = "min"
variable_nozzle_prime_direction = "auto"
variable_nozzle_prime_bridge_fan = 102
variable_probe_for_priming_result = None
variable_probe_for_priming_end_result = None
variable_probe_for_priming_result_t1 = None
variable_probe_for_priming_end_result_t1 = None
variable_probe_for_priming_disable_mesh_constraints = False
variable_adaptive_prime_offset_threshold = -1.0
variable_last_z_offset = None
variable_runout_park_in = "front"
variable_enable_unload_tip_forming = False
variable_filament_unload_length = 150
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 = True
variable_preheat_extruder_temp = 150
variable_macro_travel_speed = 300
variable_macro_travel_accel = 3000
variable_macro_z_speed = 15
variable_bed_margin_x = [0, 0]
variable_bed_margin_y = [0, 0]
variable_printable_x_min = 0
variable_printable_x_max = 0
variable_printable_y_min = 0
variable_printable_y_max = 0
variable_end_print_motors_off = True
variable_status_color_ok = "00FF00"
variable_status_color_error = "FF0000"
variable_status_color_unknown = "FFFF00"
variable_end_print_retract_filament = 10
gcode =
ECHO_RATOS_VARS
variable_beacon_bed_mesh_scv = 25
variable_beacon_contact_z_homing = False
variable_beacon_contact_start_print_true_zero = True
variable_beacon_contact_start_print_true_zero_fuzzy_position = True
variable_beacon_contact_calibrate_model_on_true_zero = True
variable_beacon_contact_wipe_before_true_zero = True
variable_beacon_contact_wipe_before_true_zero_method = "probe_clean"
variable_beacon_contact_true_zero_temp = 170
variable_beacon_contact_prime_probing = True
variable_beacon_contact_expansion_compensation = True
variable_beacon_contact_bed_mesh = False
variable_beacon_contact_bed_mesh_samples = 2
variable_beacon_contact_z_tilt_adjust = False
variable_beacon_contact_z_tilt_adjust_samples = 2
variable_beacon_scan_compensation_enable = True
variable_beacon_scan_compensation_profile = "auto"
variable_beacon_scan_compensation_desired_spacing = 10
variable_beacon_scan_compensation_bed_temp_mismatch_is_error = False
variable_beacon_contact_poke_bottom_limit = -1
variable_beacon_scan_method_automatic = False
variable_beacon_adaptive_heat_soak_max_wait = 5400
variable_beacon_adaptive_heat_soak_extra_wait_after_completion = 0
variable_beacon_adaptive_heat_soak_layer_quality = 3
variable_beacon_adaptive_heat_soak_maximum_first_layer_duration = 1800
variable_beacon_contact_start_print_true_zero_fuzzy_radius = 20
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209"]
variable_y_axes = ["y"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2", "z3"]
[ratos_homing]
axes = xyz
z_hop = 15
z_hop_speed = 15
gcode =
_LED_ON
{% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set target_idex_mode = printer["dual_carriage"].carriage_1|lower %}
_IDEX_SINGLE
_SELECT_TOOL T={default_toolhead} TOOLSHIFT=false
{% endif %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True
M400
G90
{% set X = true if params.X is defined else false %}
{% set Y = true if params.Y is defined else false %}
{% set Z = true if params.Z is defined else false %}
{% if printer["gcode_macro RatOS"].home_y_first|default(false)|lower == 'true' %}
HOME_Y X={X} Y={Y} Z={Z}
HOME_X X={X} Y={Y} Z={Z}
{% else %}
HOME_X X={X} Y={Y} Z={Z}
HOME_Y X={X} Y={Y} Z={Z}
{% endif %}
HOME_Z X={X} Y={Y} Z={Z}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR
{% endif %}
{% endif %}
[gcode_macro HOME_X]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %}
{% set homing_x = homing_x if homing_x else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_X" MSG="printable_x_max: {printable_x_max}, safe_home_x: {safe_home_x}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}"
{% if X or not Y and not Z %}
{% if homing_x == 'endstop' %}
G28 X
{% elif homing_x == 'sensorless' %}
{% if printer["dual_carriage"] is defined %}
{ action_emergency_stop("sensorless homing not supported on IDEX!") }
{% endif %}
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 %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % (0 if default_toolhead==1 else 1)].parking_position|float %}
SET_DUAL_CARRIAGE CARRIAGE={0 if default_toolhead==1 else 1} MODE=PRIMARY
G1 X{parking_position} F{speed}
SET_DUAL_CARRIAGE CARRIAGE={default_toolhead} MODE=PRIMARY
{% endif %}
{% set x_homed = True %}
G0 X{safe_home_x} F{speed}
M400
{% endif %}
[gcode_macro HOME_Y]
gcode =
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %}
{% set homing_y = homing_y if homing_y else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Y" MSG="printable_y_max: {printable_y_max}, safe_home_y: {safe_home_y}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}"
{% if Y or not X and not Z %}
{% if homing_y == 'endstop' %}
G28 Y
{% elif homing_y == '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 %}
[gcode_macro HOME_Z]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% set beacon_contact_z_homing = true if printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_z_home_position_fuzzing_radius = printer["gcode_macro RatOS"].beacon_z_home_position_fuzzing_radius|default(0)|float %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Z" MSG="x_homed: {x_homed}, y_homed: {y_homed}, z_probe: {z_probe}, beacon_contact_z_homing: {beacon_contact_z_homing}"
{% if Z or not Y and not X %}
RATOS_ECHO MSG="Homing Z"
{% if x_homed == False or y_homed == False %}
{ action_emergency_stop("X and Y must be homed before homing Z") }
{% else %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_z_homing %}
{% if beacon_contact_start_print_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro HOME_X_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
G4 P300
G28 X
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
[gcode_macro HOME_Y_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
G4 P300
G28 Y
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
[gcode_macro _Z_HOP]
description = Move Z axis up by Z_HOP distance at Z_HOP_SPEED. In relative mode it will move Z axis up by Z_HOP distance. In absolute mode it will move Z axis to Z_HOP distance.
gcode =
{% set z_hop = printer.fastconfig.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro __MOVE_TO_SAFE_Z_HOME_ECHO_DEBUG]
gcode =
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="x: {params.X}, y: {params.Y}, z_hop: {params.Z_HOP}, fuzzy_radius: {params.FUZZY_RADIUS}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}, printable_x_max: {printer['gcode_macro RatOS'].printable_x_max}, printable_y_max: {printer['gcode_macro RatOS'].printable_y_max}"
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis. Specify ABL=1 to also ensure that automatic bed levelling is applied (if configured).
variable_is_kinematic_position_overriden = False
gcode =
{% set abl = params.ABL|default('')|lower in ('true', 'yes', '1') %}
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
RATOS_ECHO 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 %}
RATOS_ECHO MSG="Homing {axesToHome}"
G28 {axesToHome}
{% else %}
RATOS_ECHO MSG="All requested axes already homed. Skipping homing."
{% endif %}
{% endif %}
{% if abl %}
{% if printer.z_tilt is defined %}
{% if not printer.z_tilt.applied %}
RATOS_ECHO MSG="Performing Z tilt adjustment..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% else %}
RATOS_ECHO MSG="Z tilt already applied. Skipping Z tilt adjustment."
{% endif %}
{% elif printer.quad_gantry_level is defined %}
{% if not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Performing quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% else %}
RATOS_ECHO MSG="Quad gantry leveling already applied. Skipping quad gantry leveling."
{% endif %}
{% else %}
RATOS_ECHO MSG="No automatic bed leveling method configured. Skipping bed leveling."
{% endif %}
{% endif %}
[gcode_macro PID_CALIBRATE_HOTEND]
description = Perform a PID calibration test for a given extruder heater.
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set temp = params.TEMP|default(220)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_HOTEND" MSG="TEMP={temp}"
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO MSG="PID calibration hotend heater T0 at {temp}°C..."
PID_CALIBRATE HEATER=extruder TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
{% if toolhead==0 or toolhead==1 %}
RATOS_ECHO MSG="PID calibration hotend heater T{toolhead} at {temp}°C..."
PID_CALIBRATE HEATER=extruder{'' if toolhead==0 else toolhead} TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_BED]
description = Perform a PID calibration test for the bed heater.
gcode =
{% set temp = params.TEMP|default(80)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_BED" MSG="TEMP={temp}"
RATOS_ECHO MSG="PID calibration bed heater at {temp}°C..."
PID_CALIBRATE HEATER=heater_bed TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_CHAMBER_HEATER]
description = Perform a PID calibration test for the chamber heater.
gcode =
{% set temp = params.TEMP|default(150)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_CHAMBER_HEATER" MSG="TEMP={temp}"
{% if printer["heater_generic chamber_heater"] is defined %}
RATOS_ECHO MSG="PID calibration chamber heater at {temp}°C..."
PID_CALIBRATE HEATER=chamber_heater TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_heater" %}
{% set link_text = "RatOS Chamber Heater" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber heater found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro INITIALIZE_PA_TUNING]
description = Start a pressure advance tuning tower.
gcode =
{% set start = params.START|default(0.0)|float %}
{% set factor = params.FACTOR|default(0.001)|float %}
{% set layer_number = printer["gcode_macro _ON_LAYER_CHANGE"].layer_number|default(0)|int %}
{% set is_printing_gcode = true if printer["gcode_macro START_PRINT"].is_printing_gcode|default(true)|lower == 'true' else false %}
{% if is_printing_gcode and layer_number < 2 %}
DEBUG_ECHO PREFIX="START_PA_TOWER" MSG="START: {start}, FACTOR: {factor}"
RATOS_ECHO MSG="Starting pressure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% else %}
RATOS_ECHO MSG="Pressure advance tuning tower requires you to be printing gcode and on layer 1 to start."
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro CHAMBER_FILTER_ON]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro CHAMBER_FILTER_OFF]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Deactivating chamber filter..."
_CHAMBER_FILTER_TURN_OFF
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro _CHAMBER_FILTER_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set chamber_filter_enable_at = printer["gcode_macro RatOS"].chamber_filter_enable_at|default('after_print_start')|lower %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_ON" MSG="at: {at}, chamber_filter_enable: {chamber_filter_enable}, chamber_filter_enable_at: {chamber_filter_enable_at}, chamber_filter_speed: {chamber_filter_speed}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if chamber_filter_enable_at == at %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON AT={at}
{% if chamber_filter_enable_at == "print_end" %}
_LED_CHAMBER_FILTER_ON
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_FILTER_OFF]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF" MSG="chamber_filter_enable: {chamber_filter_enable}, filter_disable_period: {filter_disable_period}, filter_disable_bed_temp: {filter_disable_bed_temp}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_period > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting {filter_disable_period} seconds before turning chamber filter off..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION={filter_disable_period}
{% endif %}
{% if filter_disable_bed_temp > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting for bed temp to cool down to {filter_disable_bed_temp}°C to turn filter off..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=0 MAXIMUM={filter_disable_bed_temp}
_CHAMBER_FILTER_TURN_OFF
_LED_CHAMBER_FILTER_OFF
{% endif %}
{% endif %}
[delayed_gcode _CHAMBER_FILTER_OFF_TIMER]
gcode =
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF_TIMER" MSG="executed"
_CHAMBER_FILTER_TURN_OFF
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Chamber filter turned off!"
_LED_CHAMBER_FILTER_OFF
[gcode_macro _CHAMBER_FILTER_TURN_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_speed|default(0)|float %}
{% if at == "print_end" %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_disable_speed|default(0)|float %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION=0
SET_FAN_SPEED FAN=filter SPEED={chamber_filter_speed}
[gcode_macro _CHAMBER_FILTER_TURN_OFF]
gcode =
SET_FAN_SPEED FAN=filter SPEED=0
[gcode_macro _CHAMBER_FILTER_SANITY_CHECK]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_bed_temp > 0 and filter_disable_period > 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable, not both.")}
{% endif %}
{% if filter_disable_bed_temp == 0 and filter_disable_period == 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable.")}
{% endif %}
{% endif %}
[gcode_macro CHAMBER_HEATER_ON]
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(45)|int %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp} IS_FROM_START_PRINT=False
[gcode_macro CHAMBER_HEATER_OFF]
gcode =
_CHAMBER_HEATER_OFF
[gcode_macro _CHAMBER_HEATER_ON]
variable_chamber_temp = 0
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set is_from_start_print = true if params.IS_FROM_START_PRINT|default(True)|lower == 'true' else false %}
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set chamber_heater_enable = true if printer["gcode_macro RatOS"].chamber_heater_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
{% set chamber_heater_preheating_temp = printer["gcode_macro RatOS"].chamber_heater_preheating_temp|default(150)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set chamber_heater_control_external_heater = true if printer["gcode_macro RatOS"].chamber_heater_control_external_heater|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_enable = true if printer["gcode_macro RatOS"].chamber_heater_air_circulation_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_fan_speed = printer["gcode_macro RatOS"].chamber_heater_air_circulation_fan_speed|default(0.35)|float %}
{% set chamber_heater_air_circulation_y_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_y_pos|default(0)|float %}
{% set chamber_heater_air_circulation_z_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_z_pos|default(100)|float %}
DEBUG_ECHO PREFIX="_CHAMBER_HEATER_ON" MSG="chamber_heater_enable: {chamber_heater_enable}, chamber_heater_preheating_temp: {chamber_heater_preheating_temp}, chamber_heater_heating_temp_offset: {chamber_heater_heating_temp_offset}, bed_temp: {bed_temp}, chamber_temp: {chamber_temp}, start_chamber_temp: {start_chamber_temp}"
{% if chamber_heater_enable and chamber_temp > 0 and chamber_heater_bed_temp > 0 %}
_LED_HEATING
RATOS_ECHO MSG="Preheating chamber to {(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}°C..."
{% set chamber_temp_sensor = "extruder" %}
{% if printer["dual_carriage"] is defined and default_toolhead == 1 %}
{% set chamber_temp_sensor = "extruder1" %}
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% set chamber_temp_sensor = "temperature_sensor chamber" %}
{% endif %}
{% set current_chamber_temp = printer['%s' % chamber_temp_sensor].temperature|int %}
{% set needs_heating = current_chamber_temp < (start_chamber_temp if start_chamber_temp > 0 else chamber_temp) %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_BEFORE_PREHEATING
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
{% if not is_from_start_print %}
MAYBE_HOME
{% endif %}
G0 Z{chamber_heater_air_circulation_z_pos} F{z_speed}
G0 Y{chamber_heater_air_circulation_y_pos} F{speed}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 1 else 0}
{% else %}
M106 S{(255 * chamber_heater_air_circulation_fan_speed)}
{% endif %}
{% else %}
{% if is_from_start_print %}
G0 Z{z} F{z_speed}
{% endif %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE={chamber_temp}
{% if needs_heating %}
M140 S{chamber_heater_bed_temp}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={chamber_heater_preheating_temp}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if needs_heating %}
_CHAMBER_HEATER_EXTRA_FAN_ON
{% endif %}
{% if needs_heating %}
TEMPERATURE_WAIT SENSOR="{chamber_temp_sensor}" MINIMUM={(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% endif %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED=0
_CHAMBER_FILTER_ON AT="before_print_start"
{% endif %}
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
G28 Z
{% endif %}
{% endif %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_AFTER_PREHEATING
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% if printer["heater_generic chamber_heater"] is defined %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined and chamber_heater_control_external_heater %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
_LED_SUCCESS
{% endif %}
[gcode_macro _CHAMBER_HEATER_OFF]
gcode =
RATOS_ECHO MSG="Deactivating chamber heater..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=0
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE=0
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
_CHAMBER_HEATER_EXTRA_FAN_OFF
[delayed_gcode _CHAMBER_HEATER_CONTROL]
initial_duration = 0.
gcode =
{% set chamber_temp = printer["gcode_macro _CHAMBER_HEATER_ON"].chamber_temp|default(0)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set current_chamber_temp = printer['temperature_sensor chamber'].temperature|int %}
{% if current_chamber_temp < chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if current_chamber_temp >= chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON]
gcode =
{% set chamber_heater_extra_fan_speed = printer["gcode_macro RatOS"].chamber_heater_extra_fan_speed|default(0.0)|float %}
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
{% if chamber_heater_extra_fan_speed > 0 %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED={chamber_heater_extra_fan_speed}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF]
gcode =
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED=0
{% endif %}
[gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING]
description = Will be executed before chamber preheating, only if heating is needed.
gcode =
[gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING]
description = Will be executed after chamber preheating, only if heating was needed.
gcode =
[gcode_macro _LED_START_PRINTING]
gcode =
_LED_ACTION
[gcode_macro _LED_START_PRINTING_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_PRINTING]
gcode =
_LED_ON TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_PAUSE]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_ON]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_OFF]
gcode =
_LED_STANDBY
[gcode_macro _LED_LOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_LOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_RUNOUT]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_CLOG]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_UNLOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_UNLOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_DEACTIVATE_TOOLHEAD]
gcode =
_LED_OFF TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_STANDBY]
gcode =
_LED_STANDBY TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_WAKEUP]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_MOTORS_OFF]
gcode =
_LED_STANDBY
_LED_VAOC_OFF
[gcode_macro _LED_INPUT_SHAPER_START]
gcode =
_LED_ACTION
[gcode_macro _LED_INPUT_SHAPER_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_START]
gcode =
_LED_ACTION
[gcode_macro _LED_BEACON_CALIBRATION_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_VAOC_ON]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=1.0 GREEN=1.0 BLUE=1.0
{% endif %}
[gcode_macro _LED_VAOC_OFF]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=0.0 GREEN=0.0 BLUE=0.0
{% endif %}
[gcode_macro _LED_ACTION]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_action %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SUCCESS]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_success %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_HEATING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_heating %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_COOLING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_cooling %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ERROR]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_error %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ON]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_on %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_OFF]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_off %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_STANDBY]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_standby %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
{% if toolhead >= 0 %}
{% if printer['neopixel nozzle_led_t%s' % toolhead] is defined %}
SET_LED LED={'nozzle_led_t%s' % toolhead} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% else %}
{% if printer['neopixel nozzle_led_t0'] is defined %}
SET_LED LED={'nozzle_led_t0'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% if printer['neopixel nozzle_led_t1'] is defined %}
SET_LED LED={'nozzle_led_t1'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% endif %}
_USER_LED_SET { rawparams }
[gcode_macro _USER_LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% if filament_name == '' or filament_type == '' %}
{% set filament_name = 'unknown' %}
{% set filament_type = 'unknown' %}
{% endif %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_LOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_LOAD_FILAMENT]
description = Load filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_LOAD_FILAMENT" MSG="TEMP={temp}"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=load_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
_LOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
RESTORE_GCODE_STATE NAME=load_state
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament load routine complete, please check that the filament was loaded correctly."
[gcode_macro _IDEX_LOAD_FILAMENT]
description = Load filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament into T{toolhead}..."
DEBUG_ECHO PREFIX="_IDEX_LOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
_LOAD_FILAMENT TOOLHEAD={toolhead} TEMP={temp} AUTOMATED={automated}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="Filament load routine for T{toolhead} complete, please check that the filament was loaded correctly."
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default(false)|lower == 'true' %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into hotend.."
G92 E0
G0 E{extruder_gear_to_cooling_position_distance} F{extruder_load_speed}
G92 E0
M400
RATOS_ECHO MSG="Filament loaded into hotend."
[gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set load_speed = printer["gcode_macro T%s" % toolhead].filament_load_speed|float * 60 %}
{% set filament_loading_nozzle_offset = printer["gcode_macro T%s" % toolhead].filament_loading_nozzle_offset|float %}
{% set cooling_position_to_nozzle_distance = printer["gcode_macro T%s" % toolhead].cooling_position_to_nozzle_distance|float %}
{% set purge_after_load = printer["gcode_macro T%s" % toolhead].purge_after_load|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into nozzle... Please wait!"
G92 E0
G0 E{cooling_position_to_nozzle_distance + filament_loading_nozzle_offset} F{load_speed}
G92 E0
G4 P1000
_PURGE_FILAMENT TOOLHEAD={toolhead} E={purge_after_load}
RATOS_ECHO MSG="Filament loaded into nozzle!"
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
{% set filament_grabbing_length = printer["gcode_macro T%s" % toolhead].filament_grabbing_length|float %}
{% set filament_grabbing_speed = printer["gcode_macro T%s" % toolhead].filament_grabbing_speed|float %}
{% set resume_after_insert = true if printer["gcode_macro T%s" % toolhead].resume_after_insert|default(true)|lower == 'true' else false %}
{% set enable_insert_detection = true if printer["gcode_macro T%s" % toolhead].enable_insert_detection|default(true)|lower == 'true' else false %}
{% set current_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% if enable_insert_detection %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="toolhead: {toolhead}, filament_grabbing_length: {filament_grabbing_length}, filament_grabbing_speed: {filament_grabbing_speed}, current_idex_mode: {current_idex_mode}"
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
RATOS_ECHO MSG="Filament inserted into T{toolhead}, loading..."
FORCE_MOVE STEPPER={'extruder%s' % ('' if toolhead == 0 else toolhead)} DISTANCE={filament_grabbing_length} VELOCITY={filament_grabbing_speed}
M400
{% if printer.pause_resume.is_paused %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% if resume_after_insert %}
RESUME
{% endif %}
{% else %}
{% if not printer.virtual_sdcard.is_active %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
[gcode_macro _PURGE_BEFORE_UNLOAD]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set purge_before_unload = printer["gcode_macro T%s" % toolhead].purge_before_unload|float %}
DEBUG_ECHO PREFIX="_PURGE_BEFORE_UNLOAD" MSG="TOOLHEAD: {toolhead}"
{% if purge_before_unload > 0 %}
G92 E0
G0 E{purge_before_unload} F300
G92 E0
M400
{% endif %}
[gcode_macro _PURGE_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set e = params.E|int %}
{% set r = params.R|default(0)|int %}
DEBUG_ECHO PREFIX="_PURGE_FILAMENT" MSG="TOOLHEAD: {toolhead}, E: {e}"
{% if e > 0 %}
G92 E0
G0 E{e} F300
G92 E0
M400
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={0.4 if toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={0.4 if toolhead == 1 else 0}
{% else %}
M106 S{(255 * 0.4)}
{% endif %}
{% endif %}
G4 P3000
{% if r > 0 %}
G92 E0
G0 E-{r} F300
G92 E0
M400
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{loading_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CLEANING_MOVE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_CLEANING_MOVE" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].parking_position is defined and printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% set cleaning_position = loading_position %}
{% if loading_position == parking_position %}
{% if loading_position > 0 %}
{% set cleaning_position = loading_position - 30 %}
{% else %}
{% set cleaning_position = loading_position + 30 %}
{% endif %}
{% endif %}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _BED_MESH_SANITY_CHECK]
gcode =
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is defined %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_start_print_true_zero_fuzzy_position %}
CONSOLE_ECHO TYPE="error" TITLE="Defined zero reference not compatible with fuzzy true zero" MSG="Using fuzzy start print true zero position is not compatible with a defined zero_reference_position value in the [bed_mesh] section in printer.cfg._N_Please remove the zero_reference_position value from the [bed_mesh] section, or disable fuzzy true zero position in printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_start_print_true_zero_fuzzy_position: False"
_STOP_AND_RAISE_ERROR MSG="Defined zero reference not compatible with fuzzy true zero"
{% elif zero_ref_pos[0]|float|round != safe_home_x|float|round or zero_ref_pos[1]|float|round != safe_home_y|float|round %}
CONSOLE_ECHO TYPE="error" TITLE="Zero reference position does not match safe home position" MSG="Please update your bed mesh zero reference position in printer.cfg, like so:_N__N_[bed_mesh]_N_zero_reference_position: {safe_home_x|float|round},{safe_home_y|float|round}_N_"
_STOP_AND_RAISE_ERROR MSG="Zero reference position does not match safe home position"
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if beacon_contact_bed_mesh %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact bed mesh is enabled" MSG="Beacon contact bed mesh is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_bed_mesh: False"
{% endif %}
{% if beacon_scan_method_automatic %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon 'automatic' scan method is enabled" MSG="Beacon 'automatic' scan method is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_scan_method_automatic: False"
{% endif %}
{% if beacon_contact_z_tilt_adjust %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact z-tilt adjust is enabled" MSG="Beacon contact z-tilt adjust is enabled. This is not recommended for normal use and may result in inaccurate z-tilt adjustment._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_z_tilt_adjust: False"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH]
gcode =
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE=None
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE=None
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION {rawparams}
{% endif %}
[gcode_macro _START_PRINT_BED_MESH]
variable_actual_true_zero_position_x = None
variable_actual_true_zero_position_y = None
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
SET_MACRO_TRAVEL_SETTINGS
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set X=[params.X0|default(-1)|float, params.X1|default(-1)|float] %}
{% set Y=[params.Y0|default(-1)|float, params.Y1|default(-1)|float] %}
DEBUG_ECHO PREFIX="_START_PRINT_BED_MESH" MSG="idex_mode: {idex_mode}, X: {X}, Y: {Y}"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is not defined %}
{% set zero_ref_pos = [safe_home_x if actual_true_zero_position_x is none else actual_true_zero_position_x, safe_home_y if actual_true_zero_position_y is none else actual_true_zero_position_y] %}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set X=[0, printable_x_max] %}
{% endif %}
{% set beacon_bed_mesh_scv = printer["gcode_macro RatOS"].beacon_bed_mesh_scv|default(25)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and not beacon_contact_bed_mesh %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={beacon_bed_mesh_scv}
{% endif %}
{% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %}
{% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %}
BED_MESH_CLEAR
{% if printer["gcode_macro RatOS"].adaptive_mesh|lower == 'true' %}
CALIBRATE_ADAPTIVE_MESH PROFILE="{default_profile}" X0={X[0]} X1={X[1]} Y0={Y[0]} Y1={Y[1]} T={params.T|int} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={idex_mode} ZERO_REF_POS_X={zero_ref_pos[0]} ZERO_REF_POS_Y={zero_ref_pos[1]}
{% else %}
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD="{default_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD="{printer["gcode_macro RatOS"].bed_mesh_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
[gcode_macro CALIBRATE_ADAPTIVE_MESH]
gcode =
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set default_profile = params.PROFILE %}
{% set x0 = params.X0|default(-1)|float %}
{% set y0 = params.Y0|default(-1)|float %}
{% set x1 = params.X1|default(-1)|float %}
{% set y1 = params.Y1|default(-1)|float %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Received coordinates X0={x0|round(1)} Y0={y0|round(1)} X1={x1|round(1)} Y1={y1|round(1)}"
{% if x0 >= x1 or y0 >= y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Invalid coordinates received. Please check your slicer settings. Falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if params.ZERO_REF_POS_X is defined and params.ZERO_REF_POS_Y is defined %}
{% set zero_ref_pos_x = params.ZERO_REF_POS_X|float %}
{% set zero_ref_pos_y = params.ZERO_REF_POS_Y|float %}
{% if zero_ref_pos_x < x0 or zero_ref_pos_x > x1 or zero_ref_pos_y < y0 or zero_ref_pos_y > y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Zero reference position X={zero_ref_pos_x|round(1)} Y={zero_ref_pos_y|round(1)} is outside the mesh region, expanding mesh region to include it."
{% set x0 = [x0, zero_ref_pos_x]|min %}
{% set y0 = [y0, zero_ref_pos_y]|min %}
{% set x1 = [x1, zero_ref_pos_x]|max %}
{% set y1 = [y1, zero_ref_pos_y]|max %}
{% endif %}
{% endif %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float %}
{% set mesh_x0 = [[x0, max_x]|min, min_x]|max %}
{% set mesh_y0 = [[y0, max_y]|min, min_y]|max %}
{% set mesh_x1 = [[x1, max_x]|min, min_x]|max %}
{% set mesh_y1 = [[y1, max_y]|min, min_y]|max %}
{% if mesh_x0 == min_x and mesh_y0 == min_y and mesh_x1 == max_x and mesh_y1 == max_y %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Print is using the full bed, falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% set probe_count_x = mesh_config.probe_count.split(",")[0]|int %}
{% if mesh_config.probe_count.split(",")|length == 2 %}
{% set probe_count_y = mesh_config.probe_count.split(",")[1]|int %}
{% else %}
{% set probe_count_y = mesh_config.probe_count.split(",")[0]|int %}
{% endif %}
{% set probe_x_step = (max_x - min_x) / probe_count_x %}
{% set probe_y_step = (max_y - min_y) / probe_count_y %}
{% set mesh_count_x = ([(mesh_x1 - mesh_x0) / probe_x_step, 3]|max)|int %}
{% set mesh_count_y = ([(mesh_y1 - mesh_y0) / probe_y_step, 3]|max)|int %}
{% set min_mesh_count = [mesh_count_x, mesh_count_y]|min %}
{% set max_mesh_count = [mesh_count_x, mesh_count_y]|max %}
{% set algorithm = mesh_config.algorithm %}
{% if algorithm|lower == 'lagrange' and max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="cannot exceed a probe_count of 6 when using lagrange interpolation. Falling back to bicubic interpolation."
{% set algorithm = 'bicubic' %}
{% endif %}
{% if algorithm|lower == 'bicubic' and min_mesh_count < 4 %}
{% if max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="invalid probe_count option when using bicubic interpolation. Combination of 3 points on one axis with more than 6 on another is not permitted. Forcing minimum mesh count to be 4."
{% set min_mesh_count = 4 %}
{% else %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="bicubic interpolation with a probe_count of less than 4 points detected. Forcing lagrange interpolation."
{% set algorithm = 'lagrange' %}
{% endif %}
{% endif %}
{% set mesh_count_x = ([min_mesh_count, mesh_count_x]|max)|int %}
{% set mesh_count_x = ([max_mesh_count, mesh_count_x]|min)|int %}
{% set mesh_count_y = ([min_mesh_count, mesh_count_y]|max)|int %}
{% set mesh_count_y = ([max_mesh_count, mesh_count_y]|min)|int %}
{% set should_prime = printer["gcode_macro RatOS"].nozzle_priming == 'primeblob' %}
{% if printer["dual_carriage"] is not defined %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% else %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 == 0 and not probe_first %}
{% set probe_first = true %}
{% endif %}
{% if should_prime and probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="mesh coordinates X0={mesh_x0|round(1)} Y0={mesh_y0|round(1)} X1={mesh_x1|round(1)} Y1={mesh_y1|round(1)}"
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y} RELATIVE_REFERENCE_INDEX=-1
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% if should_prime and not probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M84]
rename_existing = M84.1
gcode =
M84.1
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_OFFSET X=0 Y=0
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=SET_PRESSURE_ADVANCE VARIABLE=snyc_toolheads VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro _VAOC"] is defined %}
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started VALUE=False
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started_at_temp VALUE=False
{% endif %}
_IDEX_SINGLE INIT=1
{% endif %}
SET_SKEW CLEAR=1
_LED_MOTORS_OFF
[gcode_macro M104]
rename_existing = M104.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
DEBUG_ECHO PREFIX="M104" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set temperature_offset_t0 = printer["gcode_macro T0"].temperature_offset|default(0)|int %}
{% set temperature_offset_t1 = printer["gcode_macro T1"].temperature_offset|default(0)|int %}
{% set s0 = [s + temperature_offset_t0, 0]|max %}
{% set s1 = [s + temperature_offset_t1, 0]|max %}
{% if temperature_offset_t0 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t0}°C added to toolhead T0."
{% endif %}
{% if temperature_offset_t1 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t1}°C added to toolhead T1."
{% endif %}
{% else %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% else %}
M104.1 S{s} T{t}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M109]
rename_existing = M109.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
DEBUG_ECHO PREFIX="M109" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M109" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
M109.1 S{s} T{t}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro SET_HEATER_TEMPERATURE]
rename_existing = SET_HEATER_TEMPERATURE_BASE
gcode =
{% set heater = params.HEATER|default("") %}
{% set target = params.TARGET|default(0)|int %}
DEBUG_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="heater: {heater}, target: {target}"
{% set t = -1 %}
{% if heater|lower == "extruder" or heater|lower == "extruder1" %}
{% set t = 0 if heater|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and target > 0 %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set target = [target + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
SET_HEATER_TEMPERATURE_BASE HEATER="{heater}" TARGET={target}
{% if t != -1 and printer.fastconfig.settings.beacon is defined %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro TEMPERATURE_WAIT]
rename_existing = TEMPERATURE_WAIT_BASE
gcode =
{% set sensor = params.SENSOR|default("") %}
{% set minimum = params.MINIMUM|default(-1)|int %}
{% set maximum = params.MAXIMUM|default(-1)|int %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="sensor: {sensor}, minimum: {minimum}, maximum: {maximum}"
{% set t = -1 %}
{% if sensor|lower == "extruder" or sensor|lower == "extruder1" %}
{% set t = 0 if sensor|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and (minimum > 0 or maximum > 0) %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% if minimum > -1 %}
{% set minimum = [minimum + temperature_offset, 0]|max %}
{% endif %}
{% if maximum > -1 %}
{% set maximum = [maximum + temperature_offset, 0]|max %}
{% endif %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set id = "sensor " ~ sensor if t == -1 else "toolhead T" ~ t %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum} MAXIMUM={maximum}
{% elif minimum > -1 and maximum == -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum}
{% elif minimum == -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% else %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="neither MINIMUM or MAXIMUM args were specified, call TEMPERATURE_WAIT_BASE is expected to fail"
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}"
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for {id} reached."
[gcode_macro SDCARD_PRINT_FILE]
rename_existing = SDCARD_PRINT_FILE_BASE
gcode =
{% if printer["ratos"] is defined %}
PROCESS_GCODE_FILE { rawparams }
{% else %}
SDCARD_PRINT_FILE_BASE { rawparams }
{% endif %}
[gcode_macro SKEW_PROFILE]
rename_existing = SKEW_PROFILE_BASE
variable_loaded_profile = ""
gcode =
{% if params.LOAD is defined %}
{% if printer.fastconfig.settings["skew_correction %s" % params.LOAD] is defined %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='"{params.LOAD}"'
{% endif %}
{% endif %}
SKEW_PROFILE_BASE { rawparams }
[gcode_macro SET_SKEW]
rename_existing = SET_SKEW_BASE
gcode =
{% if params.CLEAR is defined %}
{% if params.CLEAR|default(0)|int == 1 %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='""'
{% endif %}
{% endif %}
SET_SKEW_BASE { rawparams }
[gcode_macro SET_VELOCITY_LIMIT]
rename_existing = SET_VELOCITY_LIMIT_BASE
gcode =
{% if params.ACCEL_TO_DECEL is defined %}
{% if params.ACCEL is defined %}
{% set accel = params.ACCEL|float %}
{% else %}
{% set accel = printer.toolhead.max_accel|float %}
{% endif %}
{% if params.VELOCITY is defined %}
{% set velocity = params.VELOCITY|float %}
{% else %}
{% set velocity = printer.toolhead.max_velocity|float %}
{% endif %}
{% if params.SQUARE_CORNER_VELOCITY is defined %}
{% set scv = params.SQUARE_CORNER_VELOCITY|float %}
{% else %}
{% set scv = printer.toolhead.square_corner_velocity|float %}
{% endif %}
{% set mcr = params.ACCEL_TO_DECEL|float / accel %}
DEBUG_ECHO PREFIX="SET_VELOCITY_LIMIT" MSG="ACCEL={accel}, VELOCITY={velocity}, SQUARE_CORNER_VELOCITY={scv}, MINIMUM_CRUISE_RATIO={mcr}"
SET_VELOCITY_LIMIT_BASE ACCEL={accel} VELOCITY={velocity} SQUARE_CORNER_VELOCITY={scv} MINIMUM_CRUISE_RATIO={1-mcr}
{% else %}
SET_VELOCITY_LIMIT_BASE { rawparams }
{% endif %}
[gcode_macro BED_MESH_CALIBRATE]
rename_existing = _BED_MESH_CALIBRATE_BASE
variable_abl_and_home_z_if_required = True
gcode =
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% if abl_and_home_z_if_required %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set beacon_default_probe_method = printer.fastconfig.settings.beacon.default_probe_method|default('proximity') %}
{% set probe_method = params.PROBE_METHOD|default(beacon_default_probe_method)|lower %}
{% if probe_method == 'proximity' %}
_CHECK_ACTIVE_BEACON_MODEL_TEMP TITLE="Bed mesh calibration warning"
{% endif %}
{% endif %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_BED_MESH_CALIBRATE_BASE {rawparams}
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_APPLY_RATOS_BED_MESH_PARAMETERS {rawparams}
{% endif %}
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_BASE
gcode =
DEBUG_ECHO PREFIX="SET_GCODE_OFFSET" MSG="{rawparams|replace('"', '')|replace("'", '')}"
{% set z_before = printer.gcode_move.homing_origin.z|float %}
SET_GCODE_OFFSET_BASE {rawparams}
_AFTER_SET_GCODE_OFFSET Z_BEFORE={z_before}
[gcode_macro _AFTER_SET_GCODE_OFFSET]
gcode =
{% set z_before = params.Z_BEFORE|float %}
{% set z_after = printer.gcode_move.homing_origin.z|float %}
{% if z_before != z_after %}
_ALERT_NON_ZERO_Z_OFFSET FORCE=1
{% endif %}
[gcode_macro _START_PRINT_PARK]
gcode =
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_x = printer["gcode_macro RatOS"].start_print_park_x %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% endif %}
{% if printer["dual_carriage"] is defined and not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% if printer["gcode_macro RatOS"].start_print_park_x is defined and printer["gcode_macro RatOS"].start_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="start_print_park_x is ignored for IDEX printers"
{% endif %}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={start_print_park_in} X={start_print_park_x}
G0 Z{z} F{z_speed}
[gcode_macro _END_PRINT_PARK]
gcode =
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro RatOS"].end_print_park_x is defined and printer["gcode_macro RatOS"].end_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="end_print_park_x is ignored for IDEX printers"
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x}
[gcode_macro _PARK]
gcode =
{% set x = params.X %}
{% set location = params.LOCATION|default('back')|lower %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set nozzle_priming = printer["gcode_macro RatOS"].nozzle_priming|lower %}
CACHE_TOOLHEAD_SETTINGS KEY="park"
SET_MACRO_TRAVEL_SETTINGS
{% if x != '' %}
{% if x|float >= printer.toolhead.axis_minimum.x + 5 and x|float <= printable_x_max - 5 %}
{% set park_x = x|float %}
{% else %}
{action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% else %}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% set park_y = printable_y_max - 15 %}
{% if location == 'front' %}
{% set park_y = printer.toolhead.axis_minimum.y + 5 %}
{% elif location == 'center' %}
{% set park_y = printable_y_max / 2 %}
{% elif location == 'primeblob' and printer["dual_carriage"] is defined %}
{% set park_y = printable_y_max - 15 %}
{% endif %}
{% if location == 'primeblob' and printer["dual_carriage"] is not defined %}
{% if (nozzle_priming == 'primeblob' or nozzle_priming == 'primeline') %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set park_x = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set park_x = printable_x_max - 5 %}
{% else %}
{% set park_x = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set park_y = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set park_y = printable_y_max - 5 %}
{% else %}
{% set park_y = nozzle_prime_start_y|float %}
{% endif %}
{% endif %}
{% endif %}
G90
{% if printer["dual_carriage"] is not defined %}
G0 X{park_x} Y{park_y} F{speed}
{% else %}
G0 Y{park_y} F{speed}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="park"
[gcode_macro SAVE_PROBE_RESULT]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
{% set last_z_offset = 9999.9 %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set current_z = printer.toolhead.position.z|float %}
{% if beacon_contact_prime_probing %}
{% set last_z_offset = printer.beacon.last_z_result %}
{% else %}
{% set last_z_offset = printer.beacon.last_sample.dist - current_z %}
{% endif %}
{% elif printer.fastconfig.settings.bltouch is defined %}
{% set config_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set config_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Saving offset adjustment of {last_z_offset} in {params.VARIABLE|default('last_z_offset')}"
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE={params.VARIABLE|default('last_z_offset')} VALUE={last_z_offset}
[gcode_macro PROBE_FOR_PRIMING]
gcode =
{% set probe_for_priming_disable_mesh_constraints = true if printer["gcode_macro RatOS"].probe_for_priming_disable_mesh_constraints|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower != 'false' %}
SAVE_GCODE_STATE NAME=probe_for_priming_state
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the prime location.."
CACHE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
SET_MACRO_TRAVEL_SETTINGS
{% set t = params.TOOLHEAD|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% if idex_mode == '' %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% if t == 0 %}
{% set x_start = 5 %}
{% else %}
{% set x_start = printable_x_max - 5 %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% endif %}
{% endif %}
{% set z = printer.fastconfig.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% if printer.fastconfig.settings.bltouch is defined %}
{% set x_offset = printer.fastconfig.settings.bltouch.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.bltouch.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set x_offset = printer.fastconfig.settings.probe.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.probe.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% elif printer.fastconfig.settings.beacon is defined %}
{% set x_offset = printer.fastconfig.settings.beacon.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.beacon.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.beacon.trigger_distance|float %}
{% else %}
{ action_raise_error("No probe, beacon or bltouch section found. Adaptive priming only works with a [probe], [beacon] or [bltouch] section defined.") }
{% endif %}
{% if z < z_offset %}
{ action_raise_error("Horizontal move Z ({z}) is below your probe's Z offset ({z_offset}). Please adjust your horizontal_move_z setting in [bed_mesh] to be above {z}.") }
{% endif %}
{% if not probe_for_priming_disable_mesh_constraints %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float - x_offset %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float - y_offset %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float - x_offset %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float - y_offset %}
{% set x_start = [[x_start, max_x]|min, min_x]|max %}
{% set y_start = [[y_start, max_y]|min, min_y]|max %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the start of the prime location at {x_start}, {y_start}"
G90
M83
G0 Z{z} F{z_speed}
G1 X{x_start} Y{y_start} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result
{% endif %}
{% if idex_mode == '' %}
{% set x_end = x_start %}
{% set y_end = y_start + 45 %}
{% else %}
{% if t==1 %}
{% set x_end = x_start - 45 %}
{% else %}
{% set x_end = x_start + 45 %}
{% endif %}
{% set y_end = y_start %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the end of the prime location at {x_end}, {y_end}"
G1 X{x_end} Y{y_end} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result
{% endif %}
RESTORE_GCODE_STATE NAME=probe_for_priming_state
RESTORE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
{% endif %}
[gcode_macro RESET_PRIME_PROBE_STATE]
gcode =
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result VALUE=None
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result_t1 VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result_t1 VALUE=None
{% endif %}
[gcode_macro PROBE_CURRENT_POSITION]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
SAVE_GCODE_STATE NAME=probe_current_position_state
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
ASSERT_PROBE_DEPLOYED
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
BEACON_QUERY
{% else %}
RESTORE_GCODE_STATE NAME=probe_current_position_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_z_speed|float}
{% endif %}
[gcode_macro PRIME_BLOB]
description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro.
variable_x_offset = 5
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="prime_blob"
SET_MACRO_TRAVEL_SETTINGS
RATOS_ECHO PREFIX="Priming" MSG="Priming nozzle with prime blob.."
{% set current_toolhead = 0 %}
{% set target_idex_mode = '' %}
{% set extruder = 'extruder' %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE is defined %}
{% set target_idex_mode = params.IDEX_MODE|default('')|lower %}
{% else %}
{ action_raise_error("IDEX_MODE parameter not found for PRIME_BLOB macro. This is likely a bug.") }
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Priming in IDEX {target_idex_mode} mode.."
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set current_toolhead = 1 if current_idex_mode=='primary' else 0 %}
{% set extruder = 'extruder1' if current_toolhead == 1 else 'extruder' %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
SAVE_GCODE_STATE NAME=prime_blob_state
{% endif %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|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 fan_speed = printer["gcode_macro RatOS"].nozzle_prime_bridge_fan|float %}
{% set nozzle_diameter = printer.fastconfig.settings[extruder].nozzle_diameter|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set has_start_offset_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) != 9999.9 %}
{% if printer["dual_carriage"] is defined %}
{% set has_start_offset_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) != 9999.9 %}
{% endif %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_z_height = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set nozzle_prime_direction = printer["gcode_macro RatOS"].nozzle_prime_direction|lower %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% if target_idex_mode == '' %}
{% set x_factor = 0 %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% set y_factor = 1 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% set y_factor = -1 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% if nozzle_prime_start_y|float < printable_y_max / 2 %}
{% set y_factor = 1 %}
{% else %}
{% set y_factor = -1 %}
{% endif %}
{% endif %}
{% if nozzle_prime_direction == 'forwards' %}
{% set y_factor = 1 %}
{% elif nozzle_prime_direction == 'backwards' %}
{% set y_factor = -1 %}
{% endif %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% else %}
{% set z = start_print_park_z_height %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% set y_factor = 0 %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set x_start = center_x / 2 + 5 %}
{% set x_factor = 1 %}
{% else %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% if current_toolhead == 0 %}
{% set x_start = 55 %}
{% set x_factor = -1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 55 %}
{% set x_factor = 1 %}
{% endif %}
{% else %}
{% if current_toolhead == 0 %}
{% set x_start = 5 %}
{% set x_factor = 1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 5 %}
{% set x_factor = -1 %}
{% endif %}
{% endif %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_x_max - 5 %}
{% endif %}
{% set z = 10 %}
{% endif %}
{% set start_z_offset = 0 %}
{% set end_z_offset = 0 %}
{% if has_start_offset_t0 %}
{% set start_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %}
{% set end_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_end_result|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t0) ) }
{% endif %}
{% if end_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t0) ) }
{% endif %}
{% set start_z_offset = start_z_probe_result_t0 %}
{% set end_z_offset = end_z_probe_result_t0 %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if current_toolhead == 1 or both_toolheads or target_idex_mode == "copy" or target_idex_mode == "mirror" %}
{% if has_start_offset_t1 %}
{% set start_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) %}
{% set end_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_end_result_t1|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t1) ) }
{% endif %}
{% if end_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t1) ) }
{% endif %}
{% set start_z_offset = [start_z_offset, start_z_probe_result_t1]|max %}
{% set end_z_offset = [end_z_offset, start_z_probe_result_t1]|max %}
{% endif %}
{% endif %}
{% if target_idex_mode != 'copy' and target_idex_mode != 'mirror' %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% set original_start_z_offset = start_z_offset %}
{% set original_end_z_offset = end_z_offset %}
{% set start_z_offset = original_end_z_offset %}
{% set end_z_offset = original_start_z_offset %}
{% endif %}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
DEBUG_ECHO PREFIX="PRIME_BLOB" MSG="x_start: {x_start}, y_start: {y_start}, x_factor: {x_factor}, y_factor: {y_factor}, z: {z}, start_z_offset: {start_z_offset}, end_z_offset: {end_z_offset}"
G90
M83
RATOS_ECHO PREFIX="Priming" MSG="Lifting Z to {z}.."
G0 Z{z} F{z_speed}
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% if start_print_park_in != 'primeblob' %}
G1 X{x_start} F{speed}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% endif %}
{% else %}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% if target_idex_mode=="copy" or target_idex_mode=="mirror" %}
RATOS_ECHO PREFIX="Priming" MSG="Mirroring move to {x_start}, {y_start} along the edge of the print area.."
_IDEX_MIRROR PRIMING=1
{% else %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% endif %}
G1 X{x_start} F{speed}
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Starting prime blob.."
G1 Z{0.5 + start_z_offset} F{z_speed}
G1 Y{y_start} F{speed}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
M106 S{fan_speed}
G1 Z5 F100 E5
G92 E0
RATOS_ECHO PREFIX="Priming" MSG="Bridging with {((fan_speed/255) * 100)|int}% fan speed.."
G1 F3000 X{x_start + (15 * x_factor)} Y{y_start + (15 * y_factor)} E{1 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (20 * x_factor)} Y{y_start + (20 * y_factor)} Z{3.8 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (34 * x_factor)} Y{y_start + (34 * y_factor)} Z{2.6 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (38 * x_factor)} Y{y_start + (38 * y_factor)} Z{1.4 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (42 * x_factor)} Y{y_start + (42 * y_factor)} Z{0.2 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
M106 S0
G1 F3000 X{x_start + (46 * x_factor)} Y{y_start + (46 * y_factor)} Z{0.2 + end_z_offset} E0.6
G1 F{speed} X{x_start + (50 * x_factor)} Y{y_start + (50 * y_factor)}
{% if target_idex_mode == "copy" or target_idex_mode == "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if target_idex_mode == "copy" %}
{% if first_y >= 0 %}
_IDEX_COPY DANCE=0 Y={first_y}
{% else %}
_IDEX_COPY DANCE=0 Y={params.Y1}
{% endif %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
RESTORE_GCODE_STATE NAME=prime_blob_state
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="prime_blob"
G92 E0
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_UNLOAD_FILAMENT]
description = Unload filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_UNLOAD_FILAMENT" MSG="TEMP: {temp}"
_LED_UNLOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=unload_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD=0 NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
{% endif %}
RESTORE_GCODE_STATE NAME=unload_state
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament unloading completed"
[gcode_macro _IDEX_UNLOAD_FILAMENT]
description = Unload filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading T{toolhead} filament..."
DEBUG_ECHO PREFIX="_IDEX_UNLOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} AUTOMATED={automated}
{% endif %}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="T{toolhead} filament unloading completed"
[gcode_macro _UNLOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LEGACY_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 =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set unload_speed = 5 * 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 F6000
G0 E-15 F6000
G0 E-{unload_length} F{unload_speed}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Unloading filament from nozzle to cooling zone... Please wait!"
_PURGE_BEFORE_UNLOAD TOOLHEAD={toolhead}
{% if printer["gcode_macro _UNLOAD_WITHOUT_TIP_FORMING"] is defined %}
_UNLOAD_WITHOUT_TIP_FORMING TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
{% else %}
_UNLOAD_WITH_TIP_FORMING NAME='{filament_name}' TYPE='{filament_type}'
{% endif %}
G4 P3000
[gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
{% set tooolhead_sensor_to_extruder_gear_distance = printer["gcode_macro T%s" % toolhead].tooolhead_sensor_to_extruder_gear_distance|float %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER" MSG="TOOLHEAD: {toolhead}"
G0 E-{extruder_gear_to_cooling_position_distance + tooolhead_sensor_to_extruder_gear_distance + 50} F{extruder_load_speed}
RATOS_ECHO MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_WITH_TIP_FORMING]
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% if filament_name != '' and filament_type != '' %}
_UNLOAD_KNOWN_FILAMENT NAME={filament_name} TYPE={filament_type}
{% else %}
_UNLOAD_UNKNOWN_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _UNLOAD_KNOWN_FILAMENT]
description = User overrideable tip forming macro if slicer filament profiles are known
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
RATOS_ECHO PREFIX="FILAMENT TYPE" MSG='{filament_type}'
RATOS_ECHO PREFIX="FILAMENT PROFILE" MSG='{filament_name}'
{% if filament_name == "Prusament PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% elif filament_name == "Nobufil PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% else %}
RATOS_ECHO PREFIX="_UNLOAD_KNOWN_FILAMENT" MSG="Filament profile not found!"
_UNLOAD_UNKNOWN_FILAMENT
{% endif %}
[gcode_macro _UNLOAD_UNKNOWN_FILAMENT]
description = User overrideable standard tip forming macro
gcode =
DEBUG_ECHO PREFIX="_UNLOAD_UNKNOWN_FILAMENT" MSG="Using standard tip forming macro!"
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
[gcode_macro _TIP_FORMING]
gcode =
{% set cooling_moves = params.COOLING_MOVES|default(4)|int %}
{% set cooling_move_length = params.COOLING_MOVE_LENGTH|default(10)|float %}
{% set start_cooling_speed = params.START_COOLING_SPEED|default(10)|float * 60 %}
{% set end_cooling_speed = params.END_COOLING_SPEED|default(50)|float * 60 %}
{% if cooling_moves == 0 %}
{% set cooling_move_length = 0 %}
{% endif %}
{% set dip = true if params.DIP|default(false)|lower == "true" else false %}
{% set dip_length = params.DIP_LENGTH|default(22)|float %}
{% set dip_speed = params.DIP_SPEED|default(30)|float * 60 %}
{% set dip_retract_speed = params.DIP_RETRACT_SPEED|default(70)|float * 60 %}
{% set retract_length = params.RETRACT_LENGTH|default(18)|float %}
{% set start_retract_speed = params.START_RETRACT_SPEED|default(120)|float * 60 %}
{% set end_retract_speed = params.END_RETRACT_SPEED|default(20)|float * 60 %}
DEBUG_ECHO PREFIX="_TIP_FORMING" MSG="cooling_moves: {cooling_moves}, cooling_move_length: {cooling_move_length}, start_cooling_speed: {start_cooling_speed}, end_cooling_speed: {end_cooling_speed}, dip: {dip}, dip_length: {dip_length}, dip_speed: {dip_speed}, dip_retract_speed: {dip_retract_speed}, retract_length: {retract_length}, start_retract_speed: {start_retract_speed}, end_retract_speed: {end_retract_speed}"
M220 S100
G92 E0
{% set retract = retract_length + cooling_move_length / 2 - 15 %}
G1 E-15 F{start_retract_speed}
G1 E-{0.7 * retract} F{1.0 * end_retract_speed}
G1 E-{0.2 * retract} F{0.5 * end_retract_speed}
G1 E-{0.1 * retract} F{0.3 * end_retract_speed}
G92 E0
{% if cooling_moves > 0 %}
{% set i = (end_cooling_speed - start_cooling_speed) / (2 * cooling_moves - 1) %}
{% for m in range(cooling_moves) %}
G1 E{cooling_move_length} F{(start_cooling_speed + i * m * 2)}
G1 E-{cooling_move_length} F{(start_cooling_speed + i * (m * 2 + 1))}
{% endfor %}
{% endif %}
G92 E0
{% if dip %}
G1 E{dip_length} F{dip_speed}
G4 P100
G1 E-{dip_length} F{dip_retract_speed}
{% endif %}
G92 E0
M400
[delayed_gcode __ON_FILAMENT_SENSOR_BUTTON_PRESSED_STARTUP_GUARD]
initial_duration = 2.
gcode =
SET_GCODE_VARIABLE MACRO=_ON_FILAMENT_SENSOR_BUTTON_PRESSED VARIABLE=startup_complete VALUE=True
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
variable_startup_complete = False
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set toolhead_sensor_button_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_sensor_button_only_when_sensor_enabled|default(false)|lower == 'true' %}
{% if not startup_complete and sensor_enabled %}
{action_emergency_stop("RatOS: The T%s filament sensor button was triggered immediately on printer startup. This is likely a false trigger. Please check your filament sensor wiring and configuration!" % (toolhead,))}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}, SENSOR_ENABLED: {sensor_enabled}, TOOLHEAD_SENSOR_BUTTON_ONLY_WHEN_SENSOR_ENABLED: {toolhead_sensor_button_only_when_sensor_enabled}"
{% if not printer.virtual_sdcard.is_active and (sensor_enabled or not toolhead_sensor_button_only_when_sensor_enabled) %}
UNLOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
{% set toolhead_detect_clog_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_detect_clog_only_when_sensor_enabled|default(true)|lower == 'true' %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}, ENABLE_CLOG_DETECTION: {enable_clog_detection}, TOOLHEAD_DETECT_CLOG_ONLY_WHEN_SENSOR_ENABLED: {toolhead_detect_clog_only_when_sensor_enabled}, SENSOR_ENABLED: {sensor_enabled}"
{% if enable_clog_detection and (sensor_enabled or not toolhead_detect_clog_only_when_sensor_enabled) %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_FILAMENT_END]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set clogged = true if params.CLOGGED|default(false)|lower == 'true' else false %}
{% set unload_after_runout = printer["gcode_macro T%s" % toolhead].unload_after_runout|float %}
{% if clogged %}
_LED_FILAMENT_CLOG TOOLHEAD={toolhead}
{% else %}
_LED_FILAMENT_RUNOUT TOOLHEAD={toolhead}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_END" MSG="TOOLHEAD: {toolhead}"
{% if printer.virtual_sdcard.is_active %}
{% if not printer.pause_resume.is_paused %}
PAUSE RUNOUT=True
{% endif %}
{% if not clogged and unload_after_runout %}
UNLOAD_FILAMENT TOOLHEAD={toolhead} AUTOMATED=True
{% endif %}
{% if not clogged and printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true'%}
_JOIN_SPOOL TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M600]
description = Executes a color change by pausing the printer an unloading the filament.
gcode =
PAUSE
UNLOAD_FILAMENT AUTOMATED=True
RATOS_ECHO MSG="Please load new filament and resume"
[gcode_macro COLD_PULL]
description = Automated hotend cold pull.
gcode =
{% set extrusion_temp = params.EXTRUSION_TEMP|default(220)|int %}
{% set cold_pull_temp = params.COLD_PULL_TEMP|default(80)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% if printer["dual_carriage"] is not defined %}
{% set toolhead = 0 %}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead != 0 and toolhead != 1 %}
{action_raise_error("Please select toolhead! 0 = left, 1 = right toolhead")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
RATOS_ECHO MSG="Starting cold pull on T{toolhead}..."
{% else %}
RATOS_ECHO MSG="Starting cold pull..."
{% endif %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if printer["dual_carriage"] is defined and "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
RATOS_ECHO MSG="Heating T{toolhead} to {extrusion_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={extrusion_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={extrusion_temp} MAXIMUM={extrusion_temp + 2}
G4 P3000
RATOS_ECHO MSG="extruding..."
G92 E0
G1 E30 F300
G92 E0
RATOS_ECHO MSG="Cooling T{toolhead} to {cold_pull_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={cold_pull_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={cold_pull_temp} MAXIMUM={cold_pull_temp + 2}
G4 P10000
RATOS_ECHO MSG="cold pull..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-40 VELOCITY=5 ACCEL=100
RATOS_ECHO MSG="eject filament..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-200 VELOCITY=20 ACCEL=500
RATOS_ECHO MSG="cooling down extruder..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET=0
RESTORE_GCODE_STATE NAME=cold_pull_state
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
CONSOLE_ECHO TITLE="Cold pull complete" MSG="Please remove the filament from the PTFE tube and cut the end off. Do NOT try to load it again." TYPE="warning"
[gcode_macro _USER_START_PRINT_BEFORE_HOMING]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_BED]
gcode =
[gcode_macro _USER_START_PRINT_BED_MESH]
gcode =
[gcode_macro _USER_START_PRINT_PARK]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
[gcode_macro _USER_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 =
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
[gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_PARK]
gcode =
[gcode_macro _USER_END_PRINT_FINISHED]
description = User hook for when the print is finished after gcode state has been restored.
gcode =
[gcode_macro _USER_START_PRINT]
gcode =
[gcode_macro _USER_END_START_PRINT]
gcode =
[gcode_macro _USER_START_FEATURE]
gcode =
[gcode_macro _USER_END_FEATURE]
gcode =
[gcode_macro _USER_BEFORE_IDLE_TIMEOUT]
gcode =
[gcode_macro _USER_AFTER_IDLE_TIMEOUT]
gcode =
[gcode_macro ECHO_T_VARS]
description = Echo Toolhead variables to the console.
gcode =
{% set t = params.T|default(0) %}
RATOS_ECHO MSG="T{t} Variables"
{% for var, value in printer["gcode_macro T%s" % t].items() %}
{action_respond_info(var ~ ": " ~ value)}
{% endfor %}
[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 ENSURE_CRITICAL_RATOS_INIT]
variable_completed = False
gcode =
{% if not completed %}
CALCULATE_PRINTABLE_AREA
SET_GCODE_VARIABLE MACRO=ENSURE_CRITICAL_RATOS_INIT VARIABLE=completed VALUE=True
{% endif %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
{action_respond_info("Initializing RatOS...")}
ENSURE_CRITICAL_RATOS_INIT
_LED_STANDBY
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
{% if printer.fastconfig.settings.beacon is defined %}
_BED_MESH_SANITY_CHECK
{% endif %}
{% set svv = printer.save_variables.variables %}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=0 C={svv.nozzle_expansion_coefficient_t0|default(0.06)|float}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=1 C={svv.nozzle_expansion_coefficient_t1|default(0.06)|float}
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=idex_applied_offset
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
ENSURE_CRITICAL_RATOS_INIT
HELLO_RATOS
_ALERT_NON_ZERO_Z_OFFSET
[gcode_macro _ALERT_NON_ZERO_Z_OFFSET]
gcode =
{% set force = params.FORCE|default(0)|int == 1 %}
{% set user_offset = printer.named_offsets.user_probe_z_offset.z|float %}
{% set gcode_offset = printer.gcode_move.homing_origin.z|float %}
{% set combined_offset = user_offset + gcode_offset %}
{% if force or user_offset != 0 or gcode_offset != 0 %}
{% set title = "User-adjusted Z-offset of %.3f mm is active" % combined_offset %}
{% set msg = "" %}
{% set nl = "" %}
{% if user_offset != 0 %}
{% set msg = msg + "beacon true zero user Z-offset: %.3f mm (to clear, use Z_OFFSET_APPLY_PROBE CLEAR=1)" % user_offset %}
{% set nl = "_N_" %}
{% endif %}
{% if gcode_offset != 0 %}
{% set msg = msg + nl + "G-code Z-offset: %.3f mm" % gcode_offset %}
{% endif %}
CONSOLE_ECHO TITLE="{title}" TYPE="info" MSG="{msg}"
{% endif %}
[gcode_macro _INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE]
gcode =
{% set variable = params.VARIABLE|string %}
{% set svv = printer.save_variables.variables %}
{% set nlu_msg = "no longer used, please remove" %}
{% if svv[variable] is defined %}
{% set v = svv[variable]|string|replace('"', '')|replace("'", "") %}
{% if not nlu_msg in v %}
SAVE_VARIABLE VARIABLE={variable} VALUE='"{nlu_msg} (was {v})"'
{% endif %}
CONSOLE_ECHO TITLE="Deprecated ratos-variables.cfg variable" TYPE="warning" MSG="The variable {variable} is no longer used, please remove it from your ratos-variables.cfg file."
{% endif %}
[gcode_macro _NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK]
gcode =
{% set t = params.T|int %}
{% set c = params.C|float %}
{% set normal_low = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_low|default(0.05)|float %}
{% set normal_high = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_high|default(0.10)|float %}
{% if c < 0 %}
{action_emergency_stop("Invalid nozzle_expansion_coefficient_t%s value in ratos-variables.cfg: %.3f. It must be non-negative." % (t, c))}
{% endif %}
{% if c >= normal_high %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite high. Please verify that this is correct."
{% endif %}
{% if c <= normal_low %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite low. Please verify that this is correct."
{% endif %}
[gcode_macro INITIAL_FRONTEND_UPDATE]
gcode =
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_error = printer["gcode_macro RatOS"].status_color_error|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_unknown}"'
{% endif %}
{% set t0_sensor = "undefined" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].filament_detected|lower == "true" %}
{% set t0_sensor = "detected" %}
{% else %}
{% set t0_sensor = "empty" %}
{% endif %}
{% else %}
{% set t0_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set t1_sensor = "undefined" %}
{% if printer["dual_carriage"] is defined and printer["filament_switch_sensor toolhead_filament_sensor_t1"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].filament_detected|lower == "true" %}
{% set t1_sensor = "detected" %}
{% else %}
{% set t1_sensor = "empty" %}
{% endif %}
{% else %}
{% set t1_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% if svv.t0_filament is defined and printer["gcode_macro T0"] is defined %}
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
{% if t0_sensor != "empty" %}
{% set t0_filament_type = svv.t0_filament[0]|default('')|string %}
{% set t0_filament_name = svv.t0_filament[1]|default('')|string %}
{% set t0_filament_temp = svv.t0_filament[2]|default(0)|float %}
{% if t0_filament_name != '' and t0_filament_type != '' and t0_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{t0_filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{t0_filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={t0_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
{% if svv.t1_filament is defined and printer["gcode_macro T1"] is defined %}
{% if printer["gcode_macro T1"].filament_name is defined and printer["gcode_macro T1"].filament_type is defined and printer["gcode_macro T1"].filament_temp is defined %}
{% if t1_sensor != "empty" %}
{% set t1_filament_type = svv.t1_filament[0]|default('')|string %}
{% set t1_filament_name = svv.t1_filament[1]|default('')|string %}
{% set t1_filament_temp = svv.t1_filament[2]|default(0)|float %}
{% if t1_filament_name != '' and t1_filament_type != '' and t1_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='"{t1_filament_name}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='"{t1_filament_type}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE={t1_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t1_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro CALCULATE_PRINTABLE_AREA]
variable_calculated = False
gcode =
{% if not calculated %}
{% set bed_margin_x = printer["gcode_macro RatOS"].bed_margin_x %}
{% set bed_margin_y = printer["gcode_macro RatOS"].bed_margin_y %}
{% set tool = 0 if printer["gcode_macro T0"] is not defined or printer["gcode_macro T0"].active else 1 %}
{% set max_x = printer.toolhead.axis_maximum.x if printer["dual_carriage"] is defined and tool == 0 else printer.toolhead.axis_maximum.x - bed_margin_x[1] %}
{% if printer["dual_carriage"] is defined %}
{% set max_x = printer.toolhead.axis_maximum.x %}
{% endif %}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="printer.toolhead.axis_maximum.x {printer.toolhead.axis_maximum.x}"
{% set max_y = printer.toolhead.axis_maximum.y - bed_margin_y[1]%}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_x_max VALUE={max_x}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_y_max VALUE={max_y}
SET_GCODE_VARIABLE MACRO=CALCULATE_PRINTABLE_AREA VARIABLE=calculated VALUE=True
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
RATOS_LOG PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
{% endif %}
[gcode_macro CACHE_TOOLHEAD_SETTINGS]
variable_cache = {"global": {"accel": 1000, "ratio": 0.5, "speed": 50, "scv": 5}}
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set dummy = cache.__setitem__(key, {"accel": printer.toolhead.max_accel, "ratio": printer.toolhead.minimum_cruise_ratio, "speed": printer.toolhead.max_velocity, "scv": printer.toolhead.square_corner_velocity}) %}
SET_GCODE_VARIABLE MACRO=CACHE_TOOLHEAD_SETTINGS VARIABLE=cache VALUE="{cache | pprint | replace("\n", "") | replace("\"", "\\\"")}"
DEBUG_ECHO PREFIX="CACHE_TOOLHEAD_SETTINGS" MSG="Toolhead settings cached for {key}. {printer.toolhead.max_accel} accel, {printer.toolhead.minimum_cruise_ratio} ratio, {printer.toolhead.max_velocity} velocity, {printer.toolhead.square_corner_velocity} scv."
[gcode_macro RESTORE_TOOLHEAD_SETTINGS]
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set values = printer["gcode_macro CACHE_TOOLHEAD_SETTINGS"].cache.__getitem__(key) %}
{% if values is not defined or values == 'None' %}
{ action_raise_error("RESTORE_TOOLHEAD_SETTINGS: Toolhead settings not cached for key '" ~ key ~ "'.") }
{% endif %}
SET_VELOCITY_LIMIT ACCEL={values.accel} MINIMUM_CRUISE_RATIO={values.ratio} VELOCITY={values.speed} SQUARE_CORNER_VELOCITY={values.scv}
DEBUG_ECHO PREFIX="RESTORE_TOOLHEAD_SETTINGS" MSG="Toolhead settings restored. {values.accel} accel, {values.ratio} ratio, {values.speed} velocity, {values.scv} scv."
[gcode_macro SET_MACRO_TRAVEL_SETTINGS]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float %}
{% set accel = printer["gcode_macro RatOS"].macro_travel_accel %}
SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0.5 VELOCITY={speed} SQUARE_CORNER_VELOCITY={5}
DEBUG_ECHO PREFIX="SET_MACRO_TRAVEL_SETTINGS" MSG="Macro travel settings set. {accel} accel, {speed} velocity"
[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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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
{% if printer["dual_carriage"] is not defined %}
SET_KINEMATIC_POSITION X={printable_x_max / 2} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
{% else %}
IDEX_SET_CENTER_KINEMATIC_POSITION
{% endif %}
[gcode_macro IDEX_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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set center_x = printable_x_max / 2 %}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x - (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x + (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
[gcode_macro VERIFY_HYBRID_INVERTED]
gcode =
{% set inverted = False %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy is defined and printer.fastconfig.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy.inverted|lower == 'true' %}
{% set inverted = True %}
{% endif %}
{% endif %}
{% if inverted == False %}
{ action_emergency_stop("ratos_hybrid_corexy NOT INVERTED! Inverted hybrid core-xy bugfix not detected.") }
{% endif %}
[gcode_macro RATOS_ECHO]
gcode =
{% set prefix = "RatOS" %}
{% set debug = params.DEBUG|default(0)|int %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " | " ~ params.PREFIX %}
{% endif %}
{% set prefix = prefix ~ ":" %}
{% set msg = "" %}
{% if params.MSG is defined %}
{% set msg = params.MSG %}
{% else %}
{% set msg = "No msg parameter provided (this is a bug or unintended use)." %}
{% endif %}
{% if not debug %}
M117 {prefix} {msg}
{% endif %}
RATOS_LOG PREFIX="{prefix}" MSG="{msg}"
{% if not debug %}
RESPOND PREFIX="{prefix}" MSG="{msg}"
{% else %}
CONSOLE_ECHO TITLE="{prefix}" TYPE="debug" MSG="{msg}"
{% endif %}
[gcode_macro ENABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=True
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=prefix_filter VALUE="'{params.FILTER|default('')|lower}'"
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging enabled."
[gcode_macro DISABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=False
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging disabled."
[gcode_macro DEBUG_ECHO]
variable_enabled = False
variable_prefix_filter = ''
gcode =
{% set prefix = "DEBUG" %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " - " ~ params.PREFIX %}
{% endif %}
{% if enabled and (prefix_filter|lower == '' or prefix_filter|lower in params.PREFIX|lower) %}
RATOS_ECHO PREFIX="{prefix}" MSG="{params.MSG}" DEBUG=1
{% endif %}
[gcode_macro START_FEATURE]
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="Start {params.FEATURE} feature gcode"
{% set scv = printer.toolhead.square_corner_velocity|int|default(5) %}
{% set accel = printer.toolhead.max_accel|int|default(10000) %}
{% set ratio = printer.toolhead.minimum_cruise_ratio|float|default(0.5) %}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="scv" VALUE={scv}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="accel" VALUE={accel}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="ratio" VALUE={ratio}
_USER_START_FEATURE FEATURE="{params.FEATURE}"
[gcode_macro END_FEATURE]
variable_scv = 5
variable_accel = 10000
variable_ratio = 0.5
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="End {params.FEATURE} feature gcode"
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={scv} ACCEL={accel} MINIMUM_CRUISE_RATIO={ratio}
_USER_END_FEATURE FEATURE="{params.FEATURE}" SCV={scv} ACCEL={accel} RATIO={ratio}
[gcode_macro _ON_LAYER_CHANGE]
variable_layer_number = 0
description = INTERNAL USE ONLY. Call it from the slicers after layer change custom gcode
gcode =
{% set layer = params.LAYER|int %}
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE={layer}
SET_PRINT_STATS_INFO CURRENT_LAYER={layer}
[gcode_macro _LEARN_MORE_CALIBRATION]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/calibration" %}
{% set link_text = "RatOS Calibration Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_CHAMBER_FILTER]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter Control" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_FILAMENT]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/filaments" %}
{% set link_text = "RatOS Filament Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _CONSOLE_SAVE_CONFIG]
gcode =
M118 Click SAVE_CONFIG to save the settings to your printer.cfg.
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.fastconfig.config["skew_correction %s" % ratos_skew_profile] is defined %}
SKEW_PROFILE LOAD={ratos_skew_profile}
GET_CURRENT_SKEW
{% else %}
{% set line_1 = '"Could not find skew profile %s!_N_Clearing skew correction."' % ratos_skew_profile %}
CONSOLE_ECHO TITLE="Missing skew profile!" TYPE="warning" MSG={line_1}
SET_SKEW CLEAR=1
{% endif %}
{% endif %}
[gcode_macro M601]
gcode =
PAUSE
[gcode_macro _STOP_AND_RAISE_ERROR]
gcode =
M84
_RAISE_ERROR MSG="{params.MSG}"
[gcode_macro PAUSE]
description = Pauses the print
rename_existing = PAUSE_BASE
variable_extrude = 1.5
variable_retract = 1.5
variable_fan_speed = 0
variable_idex_mode = ""
variable_idex_toolhead = 0
variable_idex_toolhead_x = 0.0
variable_idex_toolhead_y = 0.0
variable_idex_toolhead_z = 0.0
gcode =
RATOS_ECHO MSG="Pausing print..."
{% set runout_detected = true if params.RUNOUT|default(false)|lower == 'true' else false %}
_LED_PAUSE
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
SAVE_GCODE_STATE NAME=PAUSE_state
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_mode VALUE='"{idex_mode}"'
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead VALUE={idex_toolhead}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_x VALUE={printer.gcode_move.gcode_position.x|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_y VALUE={printer.gcode_move.gcode_position.y|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_z VALUE={printer.gcode_move.gcode_position.z|float}
DEBUG_ECHO PREFIX="PAUSE" MSG="idex_mode: {idex_mode}, idex_toolhead: {idex_toolhead}, idex_toolhead_x: {idex_toolhead_x}, idex_toolhead_y: {idex_toolhead_y}, idex_toolhead_z: {idex_toolhead_z}"
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
CACHE_TOOLHEAD_SETTINGS KEY="pause"
SET_MACRO_TRAVEL_SETTINGS
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% if current_z < (max_z - 20.0) %}
{% set z_safe = 20.0 %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
PAUSE_BASE
{% if printer["dual_carriage"] is not defined %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan"].speed|float}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
{% if idex_toolhead == 0 %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t1"].speed|float}
{% endif %}
{% endif %}
{% endif %}
M106 S0
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set R = printer["gcode_macro PAUSE"].retract|float %}
{% if can_extrude %}
G91
G1 E-{R} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].pause_print_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].pause_print_park_in %}
{% if runout_detected %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].runout_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].runout_park_in %}
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
DEBUG_ECHO PREFIX="PAUSE" MSG="z_speed: {z_speed}, pause_print_park_x: {pause_print_park_x}, pause_print_park_in: {pause_print_park_in}, default_toolhead: {default_toolhead}"
{% if "xyz" in printer.toolhead.homed_axes %}
G91
G1 Z{z_safe} F{z_speed}
G90
{% if printer["dual_carriage"] is not defined %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% else %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
_IDEX_SINGLE X={parking_position}
{% else %}
PARK_TOOLHEAD
{% endif %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% endif %}
{% else %}
{action_respond_info("Printer not homed")}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="pause"
RATOS_ECHO MSG="Print paused"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
RATOS_ECHO MSG="Resuming print..."
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set target_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set target_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if target_idex_mode != '' %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set fan_speed = printer["gcode_macro PAUSE"].fan_speed|float %}
{% if printer["dual_carriage"] is not defined %}
M106 S{(fan_speed * 255)}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% else %}
{% if params.TOOLHEAD is defined %}
{% if params.TOOLHEAD == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% else %}
{% if printer["gcode_macro PAUSE"].idex_toolhead == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% endif %}
{% endif %}
M106.1 S{fan_speed}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY DANCE=0
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR DANCE=0
{% else %}
{% if params.TOOLHEAD is defined %}
_SELECT_TOOL T={params.TOOLHEAD} X=-1 Y=-1 TOOLSHIFT=false
{% else %}
_SELECT_TOOL T={printer["gcode_macro PAUSE"].idex_toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% endif %}
{% set x = printer["gcode_macro PAUSE"].idex_toolhead_x|float %}
{% set y = printer["gcode_macro PAUSE"].idex_toolhead_y|float %}
{% set z = printer["gcode_macro PAUSE"].idex_toolhead_z|float %}
G1 X{x} Y{y} Z{z} F{speed}
{% if params.TOOLHEAD is defined %}
SAVE_GCODE_STATE NAME=PAUSE_STATE
{% endif %}
{% endif %}
{% if params.TOOLHEAD is not defined %}
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
{% if can_extrude %}
G91
G1 E{E} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 MOVE_SPEED={speed}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
RESUME_BASE
_LED_PRINTING
RATOS_ECHO MSG="Print resumed"
[gcode_macro CANCEL_PRINT]
description = Cancels the print
rename_existing = CANCEL_PRINT_BASE
gcode =
RATOS_ECHO MSG="Cancelling print..."
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
RATOS_ECHO MSG="Print cancelled"
[gcode_macro START_PRINT]
description = Start print procedure, use this in your Slicer.
variable_post_processor_version = 2
variable_is_printing_gcode = False
variable_both_toolheads = True
variable_object_xoffset = 0
variable_first_x = -1
variable_first_y = -1
variable_total_toolshifts = 0
variable_initial_tool = 0
variable_extruder_first_layer_temp = ""
variable_extruder_other_layer_temp = ""
gcode =
{% if params.EXTRUDER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_TEMP parameter not found.")}
{% endif %}
{% if params.EXTRUDER_OTHER_LAYER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_OTHER_LAYER_TEMP parameter not found.")}
{% endif %}
{% if params.BED_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. BED_TEMP parameter not found.")}
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' and printer["gcode_macro RatOS"].danger_force_allow_auto_center_subject|default(false)|lower != 'true'%}
{ action_raise_error("The experimental auto_center_subject feature is not supported in this version of RatOS. Please disable it in the RatOS macro settings.") }
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes and printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% if printer["gcode_macro _VAOC"].is_started|default(true)|lower == 'true' %}
_VAOC_END
{% endif %}
{% endif %}
_LED_START_PRINTING
CACHE_TOOLHEAD_SETTINGS KEY="start_print"
_USER_START_PRINT { rawparams }
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_probe_stowable = printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
{% set X0 = params.X0|default(-1)|float %}
{% set X1 = params.X1|default(-1)|float %}
{% set Y0 = params.Y0|default(-1)|float %}
{% set Y1 = params.Y1|default(-1)|float %}
{% if first_x == -1 or first_y == -1 %}
{% set first_x = params.FIRST_X|default(-1)|float %}
{% set first_y = params.FIRST_Y|default(-1)|float %}
{% endif %}
{% set total_toolshifts = params.TOTAL_TOOLSHIFTS|default(0)|int %}
{% set initial_tool = params.INITIAL_TOOL|default(default_toolhead)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set bed_temp = params.BED_TEMP|default(printer.heater_bed.target, true)|float %}
{% set total_layer_count = params.TOTAL_LAYER_COUNT|default(0)|int %}
{% set extruder_first_layer_temp = (params.EXTRUDER_TEMP|default("")).split(",") %}
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL BEACON_CONTACT_START_PRINT_TRUE_ZERO={beacon_contact_start_print_true_zero} BEACON_CONTACT_CALIBRATE_MODEL_ON_TRUE_ZERO={beacon_contact_calibrate_model_on_true_zero}
{% endif %}
_START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH BED_TEMP={bed_temp}
RATOS_ECHO MSG="First print coordinates X:{first_x} Y:{first_y}"
{% if params.TOTAL_LAYER_COUNT is not defined %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Configuration" %}
{% set line_1 = '"Your slicer gcode settings are not up to date._N_Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Incomplete Slicer Configuration detected" TYPE="warning" MSG={line_1}
{% endif %}
SET_PRINT_STATS_INFO CURRENT_LAYER=1
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE=1
{% if total_layer_count > 0 %}
SET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set swap_toolheads = true if printer["gcode_macro _IDEX_REMAP_TOOLHEADS"].enabled|default(false)|lower == 'true' else false %}
{% if swap_toolheads %}
{% set initial_tool = 0 if initial_tool == 1 else 1 %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=active VALUE=True
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=active VALUE=True
{% endif %}
{% set both_toolheads = true %}
{% if total_toolshifts == 0 %}
{% set both_toolheads = false %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
{% endif %}
{% if both_toolheads and (idex_mode == "copy" or idex_mode == "mirror") %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Gcode tool changes found. Copy and mirror mode do not support toolchanges.")}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set both_toolheads = true %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=initial_tool VALUE={initial_tool}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_x VALUE={first_x}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_y VALUE={first_y}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=total_toolshifts VALUE={total_toolshifts}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=both_toolheads VALUE={both_toolheads}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_first_layer_temp VALUE="'{params.EXTRUDER_TEMP}'"
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_other_layer_temp VALUE="'{params.EXTRUDER_OTHER_LAYER_TEMP}'"
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_TOOLCHANGE VARIABLE=toolshift_count VALUE=0
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set svv = printer.save_variables.variables %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
{% set stepper_x_position_min = printer.fastconfig.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.fastconfig.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.fastconfig.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.fastconfig.settings.dual_carriage.position_endstop|float %}
{% set x_parking_space = parking_position_t0 - (stepper_x_position_endstop , stepper_x_position_min)|max %}
{% set dc_parking_space = (dual_carriage_position_endstop , dual_carriage_position_max)|min - parking_position_t1 %}
{% if svv.idex_xoffset|abs >= (x_parking_space - 0.5) or svv.idex_xoffset|abs >= (dc_parking_space - 0.5) %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Toolhead x-offset is too high for the available parking space. Calibrate your X and DC endstop positions and make sure you stay below 1mm." % (copy_mode_max_width)) }
{% endif %}
{% endif %}
{% if (idex_mode == "copy" or idex_mode == "mirror") and printer.fastconfig.settings.ratos.enable_gcode_transform %}
{% if params.MIN_X is not defined or params.MAX_X is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Something went wrong! Missing important post processor start print parameter!") }
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE=0
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set boundary_box_min_x = params.MIN_X|default(0)|float %}
{% set boundary_box_max_x = params.MAX_X|default(printable_x_max)|float %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
{% set boundary_box_max_x = boundary_box_max_x + svv.idex_xoffset %}
{% else %}
{% set boundary_box_min_x = boundary_box_min_x - svv.idex_xoffset %}
{% endif %}
{% set center_x = printable_x_max / 2.0 %}
{% set safe_distance = printer.fastconfig.settings.dual_carriage.safe_distance|float %}
{% set object_width = boundary_box_max_x - boundary_box_min_x %}
{% set copy_mode_max_width = center_x %}
{% set mirror_mode_max_width = center_x - safe_distance / 2.0 %}
DEBUG_ECHO PREFIX="START_PRINT" MSG="OBJECT_WIDTH: {object_width} BOUNDARY_BOX_MIN_X: {boundary_box_min_x} BOUNDARY_BOX_MAX_X: {boundary_box_max_x} CENTER_X: {center_x} SAFE_DISTANCE: {safe_distance}"
{% if idex_mode == "copy" and object_width > copy_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for copy mode! Max supported width is %s mm" % (copy_mode_max_width)) }
{% endif %}
{% if idex_mode == "mirror" and object_width > mirror_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for mirror mode! Max supported width is %s mm" % (mirror_mode_max_width)) }
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = (printable_x_max - boundary_box_max_x - boundary_box_min_x) / 2 %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE={object_xoffset}
{% endif %}
{% endif %}
{% set has_initial_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_initial_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined and both_toolheads %}
{% set has_secondary_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_secondary_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% endif %}
_CHAMBER_FILTER_ON AT="before_print_start"
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true' %}
{% if both_toolheads %}
RATOS_ECHO MSG="Spool join is not possible if both toolheads are in use!"
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
CLEAR_PAUSE
{% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %}
G90
{% endif %}
SAVE_GCODE_STATE NAME=start_print_state
G21
G90
M82
_USER_START_PRINT_BEFORE_HOMING { rawparams }
{% if z_probe_stowable == true %}
STOWABLE_PROBE_BEGIN_BATCH
{% endif %}
MAYBE_HOME
_Z_HOP
{% if idex_mode != '' and not (printer.fastconfig.settings.beacon is defined and (beacon_contact_start_print_true_zero or beacon_adaptive_heat_soak)) %}
PARK_TOOLHEAD
{% endif %}
{% if chamber_temp > 0 %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED={printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float}
{% endif %}
{% endif %}
_CHAMBER_HEATER_ON START_CHAMBER_TEMP={start_chamber_temp} CHAMBER_TEMP={chamber_temp}
_USER_START_PRINT_HEAT_CHAMBER { rawparams } CHAMBER_TEMP={chamber_temp}
{% endif %}
_START_PRINT_BEFORE_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
RATOS_ECHO MSG="Heating bed..."
M190 S{bed_temp}
{% if printer.fastconfig.settings.beacon is defined and beacon_adaptive_heat_soak %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK LAYER_QUALITY={beacon_adaptive_heat_soak_layer_quality} MAXIMUM_FIRST_LAYER_DURATION={beacon_adaptive_heat_soak_maximum_first_layer_duration} MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={beacon_adaptive_heat_soak_max_wait}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_BED { rawparams }
_START_PRINT_AFTER_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
_USER_START_PRINT_BED_MESH { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_BED_MESH X0={X0} X1={X1} Y0={Y0} Y1={Y1} T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if z_probe_stowable == true %}
STOWABLE_PROBE_END_BATCH
{% endif %}
{% if idex_mode == '' %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[initial_tool]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[0]|float}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={extruder_first_layer_temp[1]|float}
{% endif %}
{% endif %}
_USER_START_PRINT_PARK { rawparams }
_START_PRINT_PARK
RATOS_ECHO MSG="Heating Extruder..."
{% if idex_mode == '' %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[initial_tool]|float} MAXIMUM={extruder_first_layer_temp[initial_tool]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder1" MINIMUM={extruder_first_layer_temp[1]|float} MAXIMUM={extruder_first_layer_temp[1]|float + 5}
{% endif %}
{% endif %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% if idex_mode == '' %}
_LED_PRINTING
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
_LED_PRINTING
{% else %}
{% if both_toolheads %}
_LED_PRINTING TOOLHEAD={initial_tool}
{% if toolchange_standby_temp > -1 %}
_LED_TOOLHEAD_STANDBY TOOLHEAD={0 if initial_tool == 1 else 1}
{% else %}
_LED_PRINTING TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% else %}
_LED_PRINTING TOOLHEAD={initial_tool}
_LED_DEACTIVATE_TOOLHEAD TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_EXTRUDER { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_AFTER_HEATING_EXTRUDER X0={X0} X1={X1} Y0={Y0} Y1={Y1} INITIAL_TOOLHEAD={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if idex_mode != '' %}
{% if not both_toolheads %}
{% if initial_tool != default_toolhead %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=standby VALUE=False
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=standby VALUE=False
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if toolchange_standby_temp > -1 %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if initial_tool == 1 else 'extruder1'} TARGET={toolchange_standby_temp}
SET_GCODE_VARIABLE MACRO=T{0 if initial_tool == 1 else 1} VARIABLE=standby VALUE=True
{% endif %}
{% endif %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if printer["dual_carriage"] is defined %}
_SET_IDEX_MODE_OFFSET
{% endif %}
{% if idex_mode != '' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% if idex_mode == "copy" and idex_mode != act_idex_mode %}
_IDEX_COPY DANCE=0
{% elif idex_mode == "mirror" and idex_mode != act_idex_mode %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
RATOS_ECHO MSG="Adjusting object x-offset by {(object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={object_xoffset} MOVE=0
{% endif %}
{% else %}
_SELECT_TOOL T={initial_tool} TOOLSHIFT=false
_SET_TOOLHEAD_OFFSET
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
_SET_EXTRUSION_MODE
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
SET_GCODE_VARIABLE MACRO=_SELECT_TOOL VARIABLE=last_timestamp VALUE={printer["print_stats"].print_duration}
{% endif %}
_USER_END_START_PRINT { rawparams }
G92 E0
_CHAMBER_FILTER_ON AT="after_print_start"
_ALERT_NON_ZERO_Z_OFFSET
RATOS_ECHO MSG="Printing..."
[gcode_macro _START_PRINT_BEFORE_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% set act_t = 1 if idex_mode == 'primary' else 0 %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set is_stowable_probe = true if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' else false %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Pre-heating extruder..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={min_temp}
{% else %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET={min_temp}
{% endif %}
{% else %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
{% endif %}
{% endif %}
{% if not is_stowable_probe %}
{% if printer["dual_carriage"] is defined and act_t != default_toolhead %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
{% endif %}
RATOS_ECHO MSG="Heat soaking z probe..."
_MOVE_TO_SAFE_Z_HOME
G0 Z2 F{z_speed}
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Waiting for extruder to be preheated..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
{% if default_toolhead == 0 %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_Z_HOP
{% endif %}
{% if auto_z_offset_calibration %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
PARK_TOOLHEAD
_CLEANING_MOVE TOOLHEAD={default_toolhead} AUTOMATED=True
_SELECT_TOOL T={0 if default_toolhead == 1 else 1} X={parking_position_t0 if default_toolhead == 1 else parking_position_t1} Y=0 TOOLSHIFT=false
_CLEANING_MOVE TOOLHEAD={0 if default_toolhead == 1 else 1} AUTOMATED=True
_VAOC_CALIBRATE_Z_OFFSET AUTO_Z_OFFSET=True
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=false
{% endif %}
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
{% if needs_rehoming %}
G28 Z
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% endif %}
{% endif %}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
PROBE PROBE_METHOD=contact SAMPLES=1
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% set fuzzy_radius = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_radius|default(0)|float if beacon_contact_start_print_true_zero_fuzzy_position else 0 %}
{% set contact_true_zero_temp_has_been_set = False %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
{% if printer.beacon.last_probe_result|lower == "ok" %}
{% set last_z_offset = printer.beacon.last_z_result %}
RATOS_ECHO MSG="Auto calibration nozzle wipe with probe result {last_z_offset}..."
G0 Z{(0.2 + last_z_offset)} F{z_speed}
G0 X70 F300
{% else %}
RATOS_ECHO MSG="Skipping auto calibration nozzle wipe because probing failed!"
{% endif %}
{% elif beacon_contact_wipe_before_true_zero_method == "probe_clean" %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% set contact_true_zero_temp_has_been_set = True %}
BEACON_PROBE_CLEAN X=50 Y=10
{% else %}
CONSOLE_ECHO TYPE="error" TITLE="Unknown wipe method" MSG="Unknown wipe method '{beacon_contact_wipe_before_true_zero_method}' configured, skipping wipe before beacon true zero."
{% endif %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME FUZZY_RADIUS={fuzzy_radius}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION
{% if not contact_true_zero_temp_has_been_set %}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% endif %}
RATOS_ECHO MSG="Beacon contact auto calibration..."
{% if beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
G0 Z5 F{z_speed}
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION]
gcode =
{% set pos = printer.ratos.last_move_to_safe_z_home_position %}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE={pos[0]}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE={pos[1]}
[gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set first_x = printer["gcode_macro START_PRINT"].first_x|default(-1)|float %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set center_x = printable_x_max / 2.0 %}
{% set center_y = printable_y_max / 2.0 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% if printer["dual_carriage"] is defined %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% endif %}
{% set X0 = params.X0|default(-1)|int %}
{% set X1 = params.X1|default(-1)|int %}
{% set Y0 = params.Y0|default(-1)|int %}
{% set Y1 = params.Y1|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% if idex_mode == '' %}
_PRIME
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
RATOS_ECHO PREFIX="IDEX" MSG="using combined prime offset for IDEX {idex_mode} mode"
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
{% if both_toolheads %}
{% if initial_toolhead == 0 %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T{initial_toolhead}"
_SELECT_TOOL T={initial_toolhead} TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% endif %}
{% endif %}
CACHE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
SET_MACRO_TRAVEL_SETTINGS
{% if (X0 > -1 and Y1 > -1) or (first_x > 0 and first_y > 0) %}
{% if printer["dual_carriage"] is defined %}
{% set acceleration = printer["gcode_macro RatOS"].toolchange_travel_accel %}
{% set max_accel = printer.toolhead.max_accel|float %}
{% set square_corner_velocity = printer.toolhead.square_corner_velocity|float %}
SET_VELOCITY_LIMIT ACCEL={acceleration} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY=20
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
{% set first_z = 1 %}
{% else %}
{% set first_z = 3 %}
{% endif %}
{% if idex_mode == "mirror" %}
{% if first_y >= 0 %}
G0 Y{first_y} F{speed}
{% else %}
G0 Y{Y1} F{speed}
{% endif %}
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
_MOVE_TO_LOADING_POSITION TOOLHEAD={initial_toolhead} AUTOMATED=True
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead} AUTOMATED=True
{% endif %}
{% if first_x >= 0 and first_y >= 0 %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% else %}
{% set first_x = X0 %}
{% set first_y = Y0 %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %}
{% set first_x = X0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %}
{% set first_x = X1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|float <= center_x %}
{% set first_x = X0 %}
{% else %}
{% set first_x = X1 %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %}
{% set first_y = Y0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %}
{% set first_y = Y1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float <= center_y %}
{% set first_y = Y0 %}
{% else %}
{% set first_y = Y1 %}
{% endif %}
{% endif %}
{% endif %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% endif %}
{% endif %}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
_LOAD_RATOS_SKEW_PROFILE
[gcode_macro _PRIME]
gcode =
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
PRIME_BLOB INITIAL_TOOLHEAD={params.INITIAL_TOOLHEAD} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={params.IDEX_MODE} Y1={params.Y1}
{% else %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE == "copy" %}
_IDEX_COPY DANCE=0
{% elif params.IDEX_MODE == "mirror" %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro END_PRINT]
description = End print procedure, use this in your Slicer.
gcode =
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SAVE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = printer["gcode_macro START_PRINT"].object_xoffset|default(0)|float %}
RATOS_ECHO MSG="Adjusting object x-offset by {(0-object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={(0-object_xoffset)}
{% endif %}
{% endif %}
_USER_END_PRINT_BEFORE_HEATERS_OFF { rawparams }
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_USER_END_PRINT_AFTER_HEATERS_OFF { rawparams }
_END_PRINT_AFTER_HEATERS_OFF
_USER_END_PRINT_PARK { rawparams }
_END_PRINT_PARK
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
{% if printer["dual_carriage"] is not defined and printer["gcode_macro RatOS"].end_print_motors_off|lower != 'false' %}
M84
{% endif %}
M107
BED_MESH_CLEAR
RATOS_ECHO MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
M84
{% endif %}
RESET_NAMED_OFFSET EVENT="end_print"
RESTORE_TOOLHEAD_SETTINGS KEY="start_print"
_CHAMBER_FILTER_ON AT="print_end"
_CHAMBER_FILTER_OFF
_CHAMBER_HEATER_OFF
_USER_END_PRINT_FINISHED { rawparams }
[gcode_macro _END_PRINT_BEFORE_HEATERS_OFF]
gcode =
RATOS_ECHO MSG="Cleaning up..."
[gcode_macro _END_PRINT_AFTER_HEATERS_OFF]
gcode =
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %}
{% set r = printer["gcode_macro RatOS"].end_print_retract_filament|default(4)|float %}
{% if current_z < (max_z - z_hop) %}
{% set z_safe = z_hop %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
G91
{% if can_extrude %}
G1 E-2 F3600
{% endif %}
G0 Z{z_safe} F3600
{% if can_extrude %}
G1 E-{(r-2)} F3600
{% endif %}
G90
[gcode_macro _SET_EXTRUSION_MODE]
gcode =
{% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %}
M83
{% else %}
M82
{% endif %}
[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 =
CACHE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set axis = params.AXIS|default('')|lower %}
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
{% if axis != '' %}
{% if axis == 'x' %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
{% elif axis == 'y' %}
MAYBE_HOME
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% else %}
{action_raise_error("Unknown axis specified. Expected X or Y.")}
{% endif %}
{% else %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% endif %}
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Shaper graph"
[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_macro MEASURE_COREXY_BELT_TENSION]
description = Generates resonance graph used to ensure belts are equally tensioned.
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
MAYBE_HOME
TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_belt_tension_graph
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Belt Tension Graph"
[gcode_shell_command generate_belt_tension_graph]
command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh
timeout = 90.
verbose = True
[idle_timeout]
gcode =
{% if printer.webhooks.state|lower == 'ready' %}
{% if printer.pause_resume.is_paused|lower == 'false' %}
_USER_BEFORE_IDLE_TIMEOUT
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
_USER_AFTER_IDLE_TIMEOUT
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[named_offsets]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[bed_mesh]
split_delta_z = 0.01
speed = 300
horizontal_move_z = 10
mesh_min = 20,30
mesh_max = 310,310
fade_start = 0.6
fade_end = 10.0
probe_count = 5,5
algorithm = bicubic
log_points = False
[fastconfig]
[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.103
control = pid
pid_kp = 42.817
pid_ki = 1.353
pid_kd = 338.788
[fan]
pin = !PA8
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PB4
fan_speed = 1
heater = extruder
shutdown_speed = 1
[controller_fan controller_fan]
pin = PD12
[printer]
kinematics = corexy
max_velocity = 300
max_accel = 3000
max_z_velocity = 20
max_z_accel = 350
square_corner_velocity = 5
minimum_cruise_ratio = 0.5
[gcode_macro QUAD_GANTRY_LEVEL]
rename_existing = QUAD_GANTRY_LEVEL_ORIG
gcode =
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
QUAD_GANTRY_LEVEL_ORIG
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 330
position_endstop = 330
step_pin = PF13
dir_pin = !x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PA2
position_min = 0
[stepper_y]
position_max = 350
position_endstop = 350
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
position_min = 0
[stepper_z]
position_max = 310
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
position_min = -5
homing_speed = 10
gear_ratio = 80:16
endstop_pin = probe:z_virtual_endstop
[quad_gantry_level]
gantry_corners =
-60,-10
410,420
points =
50,25
50,275
300,275
300,25
speed = 300
horizontal_move_z = 10
retries = 5
retry_tolerance = 0.0075
max_adjust = 10
[gcode_macro G32]
gcode =
SAVE_GCODE_STATE NAME=STATE_G32
G90
G28
QUAD_GANTRY_LEVEL
G28
G0 X175 Y175 Z30 F3600
RESTORE_GCODE_STATE NAME=STATE_G32
[extruder]
rotation_distance = 8
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB0
sensor_type = Generic 3950
sensor_pin = toolboard_t0:PA1
min_extrude_temp = 170
min_temp = 0
max_temp = 285
pressure_advance = 0.03
step_pin = toolboard_t0:PD3
dir_pin = !toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PB6
microsteps = 64
full_steps_per_rotation = 200
control = pid
pid_kp = 22.176
pid_ki = 2.843
pid_kd = 43.244
[firmware_retraction]
retract_speed = 40
unretract_extra_length = 0
unretract_speed = 40
retract_length = 0.5
[resonance_tester]
accel_chip_x = beacon
accel_chip_y = beacon
probe_points =
175,175,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 0.8
sense_resistor = 0.11
[stepper_z1]
step_pin = PE2
dir_pin = !z1_dir_pin
enable_pin = !PD4
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 0.8
sense_resistor = 0.11
[stepper_z2]
step_pin = PE6
dir_pin = !z2_dir_pin
enable_pin = !PE0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z3]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 0.8
sense_resistor = 0.11
[stepper_z3]
step_pin = PF9
dir_pin = !z3_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PB3
run_current = 0.707
driver_tbl = 0
driver_toff = 4
driver_hend = 6
driver_hstrt = 7
sense_resistor = 0.11
[beacon]
serial = /dev/beacon
x_offset = 0
y_offset = 22.5
mesh_main_direction = x
mesh_runs = 1
mesh_cluster_size = 0
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[beacon_user_z_offset]
[beacon_mesh]
[beacon_true_zero_correction]
[beacon_adaptive_heat_soak]
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
ENSURE_CRITICAL_RATOS_INIT
_BEACON_MESH_INIT
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_applied_offset
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=beacon_saved_runtime_offset
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_contact_expansion_multiplier is no longer used, please remove it from your config file."
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_scan_compensation_resolution is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_scan_compensation_resolution is no longer used, please remove it from your config file."
{% endif %}
[gcode_macro BEACON_RATOS_CALIBRATION]
gcode =
RATOS_ECHO MSG="Did you mean BEACON_RATOS_CALIBRATE?"
[gcode_macro BEACON_RATOS_CALIBRATE]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
BEACON_INITIAL_CALIBRATION _AUTOMATED=True
{% if beacon_contact_start_print_true_zero %}
BEACON_POKE_TEST _AUTOMATED=True
_BEACON_CHECK_POKE
{% if printer["dual_carriage"] is not defined %}
BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET _AUTOMATED=True
{% endif %}
{% endif %}
{% set already_heated = False %}
{% if beacon_contact_start_print_true_zero and beacon_scan_compensation_enable %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% set already_heated = True %}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True _AUTOMATED_ALREADY_HEATED={already_heated} BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if beacon_contact_start_print_true_zero %}
{% if printer["dual_carriage"] is not defined %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
_BEACON_ECHO_POKE
{% endif %}
RATOS_ECHO MSG="Beacon calibration finished!"
_LED_BEACON_CALIBRATION_END
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
[gcode_macro BEACON_INITIAL_CALIBRATION]
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
_Z_HOP
RATOS_ECHO MSG="Initial beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro BEACON_FINAL_CALIBRATION]
description = Runs BEACON_AUTO_CALIBRATE after heating the bed and chamber to specified temperatures. This creates a beacon model under reference conditions for future use.
This macro will skip calibration if both the beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero settings are enabled, because a new
model will be calibrated automatically at the start of each print. Use FORCE=True to override this check.
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set already_heated = true if params._AUTOMATED_ALREADY_HEATED|default(false)|lower == 'true' else false %}
{% set force = params.FORCE|default('false')|lower in ('1', 'true', 'yes') %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default('false')|lower == "true" %}
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero and not force %}
RATOS_ECHO MSG="BEACON_FINAL_CALIBRATION skipped, not needed because beacon_contact_calibrate_model_on_true_zero is enabled. Use FORCE=True to override."
{% else %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not already_heated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
{% if not already_heated %}
G0 Z2.5 F{z_hop_speed}
RATOS_ECHO MSG="Waiting for calibration temperature..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,3600]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% endif %}
_Z_HOP
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
_Z_HOP
RATOS_ECHO MSG="Final beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro BEACON_POKE_TEST]
variable_poke_result_1 = -1
variable_poke_result_2 = -1
variable_poke_result_3 = -1
variable_poke_result_4 = -1
variable_poke_result_5 = -1
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_1 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_2 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_3 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_4 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_5 VALUE=-1
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
G0 Z5 F{z_hop_speed}
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=1
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=2
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=3
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=4
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=5
_Z_HOP
RATOS_ECHO MSG="Beacon poke test finished!"
{% if not automated %}
_BEACON_ECHO_POKE
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_POKE]
gcode =
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
BEACON_POKE speed=3 top=5 bottom={poke_bottom}
BEACON_QUERY
[gcode_macro _BEACON_STORE_POKE]
gcode =
{% set i = params.I|default(1)|int %}
{% set last_z = printer.beacon.last_poke_result|default(0)|float %}
{% if printer.beacon.last_poke_result|lower != "none" %}
{% if printer.beacon.last_poke_result.error == 0 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE={"poke_result_%s" % i} VALUE={printer.beacon.last_poke_result.latency}
{% endif %}
{% endif %}
[gcode_macro _BEACON_CHECK_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% if p1 == -1 or p2 == -1 or p3 == -1 or p4 == -1 or p5 == -1 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test error!") }
{% endif %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg > 6 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test failed!") }
{% endif %}
[gcode_macro _BEACON_ECHO_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg <= 1 %}
{% set type = "success" %}
{% set note = "Extremely low noise, rarely achieved" %}
{% elif avg > 1 and avg <= 4 %}
{% set type = "info" %}
{% set note = "Excellent performance for a typical printer" %}
{% elif avg > 4 and avg <= 8 %}
{% set type = "warning" %}
{% set note = "Acceptable performance, machine may have considerable cyclic axis noise" %}
{% elif avg > 8 and avg <= 11 %}
{% set type = "alert" %}
{% set note = "Not ideal, may want to verify proper mounting or use thinner stackups" %}
{% elif avg > 11 %}
{% set type = "alert" %}
{% set note = "Reason for concern, present setup may be risky to continue with" %}
{% endif %}
CONSOLE_ECHO TITLE="Beacon poke test result:" TYPE={type} MSG={'"Average latency: %.2f_N_%s"' % (avg, note)}
[gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET]
variable_reference_z = 0.0
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Nozzle temperature offset calibration..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET=0
{% if not automated %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set svv = printer.save_variables.variables %}
RATOS_ECHO PREFIX="BEACON" MSG="Waiting for nozzle to reach {temp}°C..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={temp} MAXIMUM={temp + 2}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
RATOS_ECHO PREFIX="BEACON" MSG="Probing with nozzle temperature {temp}°C..."
PROBE PROBE_METHOD=contact PROBE_SPEED=3 LIFT_SPEED=15 SAMPLES=5 SAMPLE_RETRACT_DIST=3 SAMPLES_TOLERANCE=0.005 SAMPLES_TOLERANCE_RETRIES=10 SAMPLES_RESULT=median
BEACON_QUERY
G0 Z5 F{z_speed}
[gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% set last_z = printer.beacon.last_z_result|default(0)|float %}
{% if temp == 150 %}
SET_GCODE_VARIABLE MACRO=BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET"].reference_z|default(0)|float %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_t{default_toolhead} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS]
gcode =
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
CONSOLE_ECHO TYPE="info" MSG={'"T0 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t0}
{% else %}
CONSOLE_ECHO TYPE="info" MSG={'"T1 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t1}
{% endif %}
[gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET]
description = "Set the thermal expansion z offset for the active toolhead based on the current extruder target temperature and thermal expansion coefficient."
gcode =
{% if params.RESET is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The RESET parameter is no longer supported and has no effect."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% if params.TOOLHEAD is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The TOOLHEAD parameter is no longer supported and has no effect. The macro now automatically determines the current toolhead."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% set beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_expansion_compensation %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set toolhead = default_toolhead %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if current_idex_mode=='primary' else default_toolhead %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_t0 = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if printer["dual_carriage"] is defined %}
{% set nozzle_expansion_coefficient_t1 = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_delta = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = temp_delta * (expansion_coefficient / 100) %}
SET_NAMED_OFFSET NAME=hotend_thermal_expansion Z={expansion_offset} MOVE=1 MOVE_SPEED={z_speed}
RATOS_ECHO PREFIX="BEACON" MSG={'"Nozzle expansion offset of %.6fmm applied to T%s"' % (expansion_offset, toolhead)}
DEBUG_ECHO PREFIX="_BEACON_SET_NOZZLE_TEMP_OFFSET" MSG="toolhead: {toolhead}, coefficient: {expansion_coefficient|round(6)}, temp_delta: {temp_delta|round(1)}, expansion_offset: {expansion_offset|round(6)}"
{% endif %}
[gcode_macro BEACON_MEASURE_BEACON_OFFSET]
variable_needs_compensation = False
variable_reference_z = 0.0
variable_front = 0.0
variable_front_left = 0.0
variable_front_right = 0.0
variable_back = 0.0
variable_back_left = 0.0
variable_back_right = 0.0
variable_right = 0.0
variable_left = 0.0
variable_margin_x = 40
variable_margin_y = 40
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure beacon offset..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_BEACON_OFFSET
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_STORE_BEACON_OFFSET]
gcode =
{% set location = params.LOCATION|lower %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_BEACON_OFFSET]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].left|default(0)|float * 1000 %}
{% set line_1 = "Front left: %.6fμm" % (front_left) %}
{% set line_2 = "Front center: %.6fμm" % (front) %}
{% set line_3 = "Front right: %.6fμm" % (front_right) %}
{% set line_4 = "Left center: %.6fμm" % (left) %}
{% set line_5 = "Right center: %.6fμm" % (right) %}
{% set line_6 = "Back left: %.6fμm" % (back_left) %}
{% set line_7 = "Back center: %.6fμm" % (back) %}
{% set line_8 = "Back right: %.6fμm" % (back_right) %}
{% set max_value = [(front_left|abs), (front|abs), (front_right|abs), (left|abs), (right|abs), (back_left|abs), (back|abs), (back_right|abs)]|max %}
{% if max_value <= 50 %}
{% set type = "success" %}
{% set recommendation = "Very low beacon offset: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low beacon offset: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High beacon offset: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High beacon offset: %.6fμm._N_You will encounter first layer problems on large prints unless you activate beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high beacon offset: %.6fμm._N_You have significant scan/contact inconsistency which is indicative of mechanical problems, please investigate before resorting to software compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Beacon offset relative to the center" TYPE={type} MSG={'"_N_%s_N__N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s"' % (recommendation, line_1, line_2, line_3, line_4, line_5, line_6, line_7, line_8)}
[gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set profile = params.PROFILE|default("auto")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set keep_temp_meshes = params.KEEP_TEMP_MESHES|default(0) %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' %}
{% set desired_spacing = printer["gcode_macro RatOS"].beacon_scan_compensation_desired_spacing|float %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
RATOS_ECHO MSG="Please wait..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,9000]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if not (beacon_adaptive_heat_soak or bed_heat_soak_time > 0) %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if printer.z_tilt is defined %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% endif %}
{% if printer.quad_gantry_level is defined %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% endif %}
_BEACON_CREATE_SCAN_COMPENSATION_MESH_CORE PROFILE="{profile}" DESIRED_SPACING={desired_spacing} CHAMBER_TEMP={chamber_temp} KEEP_TEMP_MESHES={keep_temp_meshes}
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if automated %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
RATOS_ECHO MSG="Beacon scan compensation mesh created!"
{% if not automated %}
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
{% endif %}
{% endif %}
[gcode_macro _BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED" MSG="beacon_scan_compensation_profile {beacon_scan_compensation_profile}, beacon_scan_compensation_enable {beacon_scan_compensation_enable}"
{% if beacon_scan_compensation_enable %}
BEACON_APPLY_SCAN_COMPENSATION PROFILE="{beacon_scan_compensation_profile}"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL]
gcode =
{% set beacon_contact_start_print_true_zero = params.BEACON_CONTACT_START_PRINT_TRUE_ZERO|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = params.beacon_contact_calibrate_model_on_true_zero|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and not printer.beacon.model %}
{% set beacon_model_required_for_true_zero = beacon_contact_start_print_true_zero and not beacon_contact_calibrate_model_on_true_zero %}
{% set beacon_model_required_for_homing =
printer.fastconfig.settings.stepper_z.endstop_pin == 'probe:z_virtual_endstop'
and (( printer.fastconfig.settings.beacon.home_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower != 'true')
or ( printer.fastconfig.settings.beacon.default_probe_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower != 'true' )) %}
{% if beacon_model_required_for_homing or beacon_model_required_for_true_zero %}
_LED_START_PRINTING_ERROR
{ action_raise_error("An active Beacon model is required. Have you performed initial Beacon calibration?") }
{% endif %}
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set bed_temp_mismatch_is_error = true if printer["gcode_macro RatOS"].beacon_scan_compensation_bed_temp_mismatch_is_error|default(false)|lower == 'true' else false %}
{% set bed_temp = params.BED_TEMP|default(0)|float %}
{% if bed_temp == 0 %}
{% set bed_temp = printer.heater_bed.temperature %}
{% endif %}
DEBUG_ECHO PREFIX="_START_PRINT_PREFLIGHT_CHECK_BEACON" MSG="beacon_scan_compensation_profile={beacon_scan_compensation_profile}, beacon_scan_compensation_enable={beacon_scan_compensation_enable}, bed_temp={bed_temp}"
{% if beacon_scan_compensation_enable %}
_VALIDATE_COMPENSATION_MESH_PROFILE PROFILE="{beacon_scan_compensation_profile}" TITLE="Check Beacon scan compensation profile" SUBJECT="Configured compensation profile '{beacon_scan_compensation_profile}'" COMPARE_BED_TEMP={bed_temp} COMPARE_BED_TEMP_IS_ERROR={bed_temp_mismatch_is_error}
{% endif %}
[gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set needs_scan_compensation = true if printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].needs_compensation|default(false)|lower == 'true' else false %}
{% if needs_scan_compensation %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% endif %}
[gcode_macro _BEACON_HOME_AND_ABL]
gcode =
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% if needs_rehoming %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
[gcode_macro SAVE_Z_OFFSET]
description = Deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead, or in Mainsail use the SAVE button in the Z-OFFSET section.
gcode =
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default('false')|lower == 'true' %}
{% set msg = "SAVE_Z_OFFSET is deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead,_N_or in Mainsail use the SAVE button in the Z-OFFSET section."%}
{% if not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% set msg = msg + "_N_You must then use the SAVE_CONFIG command to persist the change." %}
{% endif %}
CONSOLE_ECHO TYPE="error" MSG="{msg}"
[gcode_macro _BEACON_OFFSET_COMPARE]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE SAMPLES_DROP=1 SAMPLES=3
BEACON_QUERY
[gcode_macro T0]
variable_join = 0
variable_remap = 0
variable_alert = ""
variable_filament_name = ""
variable_filament_type = ""
variable_filament_temp = 0
variable_runout_sensor = ""
variable_active = True
variable_color = "7bff33"
variable_hotend_type = "HF"
variable_has_cht_nozzle = False
variable_cooling_position_to_nozzle_distance = 40
variable_tooolhead_sensor_to_extruder_gear_distance = 15
variable_extruder_gear_to_cooling_position_distance = 30
variable_filament_loading_nozzle_offset = -5
variable_filament_grabbing_length = 5
variable_filament_grabbing_speed = 1
variable_enable_insert_detection = True
variable_enable_runout_detection = True
variable_enable_clog_detection = True
variable_unload_after_runout = True
variable_purge_after_load = 0
variable_purge_before_unload = 0
variable_extruder_load_speed = 60
variable_filament_load_speed = 10
variable_standby = False
variable_temperature_offset = 0
variable_has_oozeguard = False
variable_has_front_arm_nozzle_wiper = False
variable_toolhead_sensor_button_only_when_sensor_enabled = False
variable_toolhead_detect_clog_only_when_sensor_enabled = True
variable_resume_after_insert = False
gcode =
{% set x = params.X|default(-1.0)|float %}
{% set y = params.Y|default(-1.0)|float %}
{% set z = params.Z|default(0.0)|float %}
{% set s = params.S|default(1)|int %}
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
_SELECT_TOOL T=0 X={x} Y={y} Z={z} TOOLSHIFT={s}
{% endif %}
[save_variables]
filename = /home/pi/printer_data/config/ratos-variables.cfg
=======================
Extruder max_extrude_ratio=0.266081
mcu 'mcu': Starting serial connect
webhooks client 3979023840: New connection
webhooks client 3979023840: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c3_PA8_PC9=PA8,PC9 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_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 BUS_PINS_spi5=PF8,PF9,PF7 BUS_PINS_spi5a=PH7,PF11,PH6 BUS_PINS_spi6=PG12,PG14,PG13 CLOCK_FREQ=400000000 MCU=stm32h723xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu 'rpi': Starting connect
Loaded MCU 'rpi' 119 commands (?-20240727_132503-fv-az659-741 / gcc: (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110 binutils: (GNU Binutils for Raspbian) 2.35.2)
MCU 'rpi' config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256
mcu 'toolboard_t0': Starting serial connect
Loaded MCU 'toolboard_t0' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'toolboard_t0' config: ADC_MAX=4095 BUS_PINS_i2c1_PA9_PA10=PA9,PA10 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c2_PB13_PB14=PB13,PB14 BUS_PINS_i2c3_PB3_PB4=PB3,PB4 BUS_PINS_i2c3_PC0_PC1=PC0,PC1 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2_PB2_PB11_PB10=PB2,PB11,PB10 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=64000000 MCU=stm32g0b1xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PF0,PF1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu_temperature 'mcu' nominal base=-274.761905 slope=1625.000000
mcu_temperature 'toolboard_t0' nominal base=-273.206997 slope=1313.265306
mcu 'beacon': Starting serial connect
Loaded MCU 'beacon' 45 commands (Beacon 2.1.0 / )
MCU 'beacon' config: ADC_MAX=4095 BEACON_ACCEL_BITS=12 BEACON_ACCEL_SCALE_16G=7.81 BEACON_ACCEL_SCALE_2G=0.98 BEACON_ACCEL_SCALE_4G=1.95 BEACON_ACCEL_SCALE_8G=3.91 BEACON_ADC_SMOOTH_COUNT=16 BEACON_HAS_ACCEL=1 BEACON_REV=H CLOCK_FREQ=32000000 MCU=beacon STATS_SUMSQ_BASE=256
Sending MCU 'mcu' printer configuration...
Configured MCU 'mcu' (1024 moves)
Sending MCU 'rpi' printer configuration...
Configured MCU 'rpi' (1024 moves)
Sending MCU 'toolboard_t0' printer configuration...
Configured MCU 'toolboard_t0' (1024 moves)
Starting heater checks for heater_bed
beacon: loaded fnorm=5097771.25 temp=19.76 amfg=0.960 from nvm
beacon: built tempco model version 1 {'amfg': 0.9600737096063234, 'tcc': -6.477678986652925e-06, 'tcfl': -0.0006437466059114605, 'tctl': 0.0019760718274445636, 'fmin': 5097771.253436804, 'fmin_temp': 19.758686065673828}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
beacon_user_z_offset: beacon_contact_start_print_true_zero is enabled, activating beacon user z-offset management. Applying configured z_offset of 0.0 mm to named offset 'user_probe_z_offset'.
Starting heater checks for extruder
Stats 1654.3: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3490 bytes_read=7227 bytes_retransmit=9 bytes_invalid=0 send_seq=290 receive_seq=290 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400013973 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=846 bytes_read=4681 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999566 adj=49994681 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1426 bytes_read=5013 bytes_retransmit=9 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000471 adj=63998495 Octopus_Pro_H723_V1.1: temp=0.0 EBB42_Gen2_v1.0: temp=31.1 raspberry_pi: temp=59.4 heater_bed: target=0 temp=0.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=360 bytes_read=1981 bytes_retransmit=0 bytes_invalid=0 send_seq=60 receive_seq=60 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31996344 adj=31995204 coil_temp=0.0 refs=0 sysload=0.37 cputime=50.698 memavail=3313384 print_time=8.344 buffer_time=0.249 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Initializing RatOS...
CALCULATE_PRINTABLE_AREA: Printable area calculated: X: 0,330.0 Y: 0,350.0
webhooks: registering remote method 'shutdown_machine' for connection id: 3979023840
webhooks: registering remote method 'reboot_machine' for connection id: 3979023840
webhooks: registering remote method 'pause_job_queue' for connection id: 3979023840
webhooks: registering remote method 'start_job_queue' for connection id: 3979023840
Stats 1655.3: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3496 bytes_read=7344 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015765 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=852 bytes_read=4697 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999598 adj=50000012 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1432 bytes_read=5116 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64001217 adj=63998204 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=366 bytes_read=2337 bytes_retransmit=0 bytes_invalid=0 send_seq=61 receive_seq=61 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999505 adj=31995319 coil_temp=21.8 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.37 cputime=50.767 memavail=3310280 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
ratos: beacon probing regions updated: BeaconProbingRegions(x_offset=0.0, y_offset=22.5, printable_x_max=330.0, printable_y_max=350.0, mesh_proximity_min_coil_pos=(20.0, 30.0), mesh_proximity_max_coil_pos=(310.0, 310.0), mesh_proximity_min_toolhead_pos=(20.0, 7.5), mesh_proximity_max_toolhead_pos=(310.0, 287.5), mesh_contact_min=(20.0, 30.0), mesh_contact_max=(310.0, 287.5), logical_proximity_min_coil_pos=(20.0, 20.0), logical_proximity_max_coil_pos=(310.0, 330.0), logical_proximity_min_toolhead_pos=(20.0, -2.5), logical_proximity_max_toolhead_pos=(310.0, 307.5), logical_contact_min=(10.0, -12.5), logical_contact_max=(320.0, 317.5))
HELLO_RATOS: version: v2.1.0-RC4-5-g9b7d2ad3, distro: RatOS v2.1.0-RC4 (bullseye)
No deferred RatOS console messages to write.
ratos: Current CPU governor(s): performance
Stats 1656.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3508 bytes_read=7546 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400017182 rpi: mcu_awake=0.003 mcu_task_avg=0.000019 mcu_task_stddev=0.000011 bytes_write=858 bytes_read=4727 bytes_retransmit=0 bytes_invalid=0 send_seq=117 receive_seq=117 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999666 adj=49999223 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000026 bytes_write=1438 bytes_read=5292 bytes_retransmit=9 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000727 adj=63998907 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=2879 bytes_retransmit=0 bytes_invalid=0 send_seq=63 receive_seq=63 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999862 adj=31999889 coil_temp=21.8 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.42 cputime=50.927 memavail=3303896 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1657.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3514 bytes_read=7647 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016646 rpi: mcu_awake=0.003 mcu_task_avg=0.000019 mcu_task_stddev=0.000011 bytes_write=864 bytes_read=4743 bytes_retransmit=0 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999566 adj=49998358 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000026 bytes_write=1450 bytes_read=5411 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000670 adj=63997313 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=3235 bytes_retransmit=0 bytes_invalid=0 send_seq=64 receive_seq=64 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999999 adj=31999686 coil_temp=21.8 refs=0 mcu_temp=24.32 supply_voltage=2.995 sysload=0.42 cputime=50.955 memavail=3315376 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1658.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3520 bytes_read=7750 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016401 rpi: mcu_awake=0.003 mcu_task_avg=0.000019 mcu_task_stddev=0.000011 bytes_write=870 bytes_read=4759 bytes_retransmit=0 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999485 adj=49998074 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000026 bytes_write=1456 bytes_read=5543 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000520 adj=63997571 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=3591 bytes_retransmit=0 bytes_invalid=0 send_seq=65 receive_seq=65 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999915 adj=31999788 coil_temp=21.8 refs=0 mcu_temp=24.34 supply_voltage=2.995 sysload=0.42 cputime=50.980 memavail=3315192 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.3 pwm=0.000
Stats 1659.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3526 bytes_read=7882 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016217 rpi: mcu_awake=0.003 mcu_task_avg=0.000019 mcu_task_stddev=0.000011 bytes_write=876 bytes_read=4775 bytes_retransmit=0 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999548 adj=49997842 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000026 bytes_write=1462 bytes_read=5646 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000439 adj=63997470 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=3947 bytes_retransmit=0 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999900 adj=31999362 coil_temp=21.8 refs=0 mcu_temp=24.36 supply_voltage=2.995 sysload=0.42 cputime=51.006 memavail=3314940 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1660.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3532 bytes_read=7985 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016647 rpi: mcu_awake=0.003 mcu_task_avg=0.000019 mcu_task_stddev=0.000011 bytes_write=882 bytes_read=4791 bytes_retransmit=0 bytes_invalid=0 send_seq=121 receive_seq=121 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999606 adj=49997993 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000026 bytes_write=1468 bytes_read=5749 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000399 adj=63997443 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=4303 bytes_retransmit=0 bytes_invalid=0 send_seq=67 receive_seq=67 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999898 adj=31999261 coil_temp=21.8 refs=0 mcu_temp=24.37 supply_voltage=2.995 sysload=0.42 cputime=51.032 memavail=3313292 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1661.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3538 bytes_read=8102 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016664 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=888 bytes_read=4820 bytes_retransmit=0 bytes_invalid=0 send_seq=122 receive_seq=122 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999593 adj=49997883 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1474 bytes_read=5895 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000371 adj=63997203 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=4659 bytes_retransmit=0 bytes_invalid=0 send_seq=68 receive_seq=68 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999909 adj=31998980 coil_temp=21.8 refs=0 mcu_temp=24.38 supply_voltage=2.995 sysload=0.38 cputime=51.056 memavail=3313296 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1662.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3544 bytes_read=8234 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016470 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=894 bytes_read=4836 bytes_retransmit=0 bytes_invalid=0 send_seq=123 receive_seq=123 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999578 adj=49997744 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1480 bytes_read=5998 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000381 adj=63997238 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=5015 bytes_retransmit=0 bytes_invalid=0 send_seq=69 receive_seq=69 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999934 adj=31998904 coil_temp=21.8 refs=0 mcu_temp=24.38 supply_voltage=2.995 sysload=0.38 cputime=51.081 memavail=3313296 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1663.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3550 bytes_read=8337 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016279 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=900 bytes_read=4852 bytes_retransmit=0 bytes_invalid=0 send_seq=124 receive_seq=124 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999584 adj=49997719 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1486 bytes_read=6101 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997502 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.2 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=5371 bytes_retransmit=0 bytes_invalid=0 send_seq=70 receive_seq=70 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999962 adj=31998964 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.38 cputime=51.106 memavail=3314420 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.3 pwm=0.000
Stats 1664.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3556 bytes_read=8440 bytes_retransmit=9 bytes_invalid=0 send_seq=301 receive_seq=301 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016424 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=906 bytes_read=4868 bytes_retransmit=0 bytes_invalid=0 send_seq=125 receive_seq=125 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999603 adj=49997787 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1492 bytes_read=6233 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997616 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=5727 bytes_retransmit=0 bytes_invalid=0 send_seq=71 receive_seq=71 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000015 adj=31999033 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.38 cputime=51.131 memavail=3314560 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1665.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3562 bytes_read=8572 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016349 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000015 bytes_write=912 bytes_read=4884 bytes_retransmit=0 bytes_invalid=0 send_seq=126 receive_seq=126 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999595 adj=49997729 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1498 bytes_read=6336 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000348 adj=63997541 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=6083 bytes_retransmit=0 bytes_invalid=0 send_seq=72 receive_seq=72 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000014 adj=31999089 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.38 cputime=51.156 memavail=3313440 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.3 pwm=0.000
Stats 1666.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3568 bytes_read=8689 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016227 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=918 bytes_read=4913 bytes_retransmit=0 bytes_invalid=0 send_seq=127 receive_seq=127 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999590 adj=49997693 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1504 bytes_read=6453 bytes_retransmit=9 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000346 adj=63997597 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=6439 bytes_retransmit=0 bytes_invalid=0 send_seq=73 receive_seq=73 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000016 adj=31999015 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.35 cputime=51.182 memavail=3313444 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1667.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3574 bytes_read=8787 bytes_retransmit=9 bytes_invalid=0 send_seq=304 receive_seq=304 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016180 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=924 bytes_read=4929 bytes_retransmit=0 bytes_invalid=0 send_seq=128 receive_seq=128 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999583 adj=49997700 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1510 bytes_read=6585 bytes_retransmit=9 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000351 adj=63997711 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=6795 bytes_retransmit=0 bytes_invalid=0 send_seq=74 receive_seq=74 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000018 adj=31998990 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.35 cputime=51.207 memavail=3313444 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1668.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3580 bytes_read=8919 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016095 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=930 bytes_read=4945 bytes_retransmit=0 bytes_invalid=0 send_seq=129 receive_seq=129 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999581 adj=49997663 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1516 bytes_read=6688 bytes_retransmit=9 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000348 adj=63997780 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=7151 bytes_retransmit=0 bytes_invalid=0 send_seq=75 receive_seq=75 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000023 adj=31998951 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.35 cputime=51.232 memavail=3313448 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1669.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3586 bytes_read=9022 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016096 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=936 bytes_read=4961 bytes_retransmit=0 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999579 adj=49997682 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1522 bytes_read=6791 bytes_retransmit=9 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997828 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=7507 bytes_retransmit=0 bytes_invalid=0 send_seq=76 receive_seq=76 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000037 adj=31998948 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.35 cputime=51.258 memavail=3313448 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.4 pwm=0.000
Stats 1670.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3592 bytes_read=9125 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016026 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=942 bytes_read=4977 bytes_retransmit=0 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999605 adj=49997639 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1528 bytes_read=6923 bytes_retransmit=9 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000374 adj=63997847 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=7863 bytes_retransmit=0 bytes_invalid=0 send_seq=77 receive_seq=77 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000048 adj=31998961 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.35 cputime=51.284 memavail=3312328 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1671.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3598 bytes_read=9271 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016043 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=948 bytes_read=5006 bytes_retransmit=0 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999620 adj=49997767 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1534 bytes_read=7040 bytes_retransmit=9 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000397 adj=63997937 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=8219 bytes_retransmit=0 bytes_invalid=0 send_seq=78 receive_seq=78 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000051 adj=31998968 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.32 cputime=51.310 memavail=3312328 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1672.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3604 bytes_read=9374 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015993 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=954 bytes_read=5022 bytes_retransmit=0 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999612 adj=49997796 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1540 bytes_read=7143 bytes_retransmit=9 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000399 adj=63998012 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=8575 bytes_retransmit=0 bytes_invalid=0 send_seq=79 receive_seq=79 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000053 adj=31998930 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.32 cputime=51.334 memavail=3312328 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.3 pwm=0.000
Stats 1673.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3610 bytes_read=9477 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015953 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=960 bytes_read=5038 bytes_retransmit=0 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999607 adj=49997743 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1546 bytes_read=7275 bytes_retransmit=9 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000397 adj=63998026 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=8931 bytes_retransmit=0 bytes_invalid=0 send_seq=80 receive_seq=80 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000059 adj=31998921 coil_temp=21.8 refs=0 mcu_temp=24.41 supply_voltage=2.995 sysload=0.32 cputime=51.360 memavail=3312328 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1674.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3616 bytes_read=9609 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015916 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=966 bytes_read=5054 bytes_retransmit=0 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999601 adj=49997712 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1552 bytes_read=7378 bytes_retransmit=9 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000388 adj=63998003 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=9287 bytes_retransmit=0 bytes_invalid=0 send_seq=81 receive_seq=81 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000060 adj=31998936 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.32 cputime=51.385 memavail=3312328 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1675.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3622 bytes_read=9712 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015899 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000017 bytes_write=972 bytes_read=5070 bytes_retransmit=0 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999599 adj=49997677 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1558 bytes_read=7481 bytes_retransmit=9 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000391 adj=63997950 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=9643 bytes_retransmit=0 bytes_invalid=0 send_seq=82 receive_seq=82 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000081 adj=31998925 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.32 cputime=51.412 memavail=3310676 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1676.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3628 bytes_read=9829 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015895 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=978 bytes_read=5099 bytes_retransmit=0 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999614 adj=49997662 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1564 bytes_read=7627 bytes_retransmit=9 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000384 adj=63997956 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=9999 bytes_retransmit=0 bytes_invalid=0 send_seq=83 receive_seq=83 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000086 adj=31999023 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.30 cputime=51.437 memavail=3310676 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1677.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3634 bytes_read=9961 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016007 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=984 bytes_read=5115 bytes_retransmit=0 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999606 adj=49997752 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1570 bytes_read=7730 bytes_retransmit=9 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000380 adj=63997889 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=504 bytes_read=10355 bytes_retransmit=0 bytes_invalid=0 send_seq=84 receive_seq=84 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000090 adj=31999000 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.30 cputime=51.462 memavail=3310676 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1678.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3640 bytes_read=10059 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016001 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=990 bytes_read=5131 bytes_retransmit=0 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999606 adj=49997575 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1576 bytes_read=7833 bytes_retransmit=9 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000377 adj=63997737 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=510 bytes_read=10711 bytes_retransmit=0 bytes_invalid=0 send_seq=85 receive_seq=85 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000090 adj=31998923 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.30 cputime=51.497 memavail=3310676 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1679.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3646 bytes_read=10162 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015982 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1002 bytes_read=5163 bytes_retransmit=0 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999598 adj=49997585 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1582 bytes_read=7965 bytes_retransmit=9 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000374 adj=63997743 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=516 bytes_read=11067 bytes_retransmit=0 bytes_invalid=0 send_seq=86 receive_seq=86 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000091 adj=31998895 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.30 cputime=51.523 memavail=3310676 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1680.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3652 bytes_read=10294 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015955 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1008 bytes_read=5179 bytes_retransmit=0 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999600 adj=49997549 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1588 bytes_read=8068 bytes_retransmit=9 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000372 adj=63997761 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=522 bytes_read=11423 bytes_retransmit=0 bytes_invalid=0 send_seq=87 receive_seq=87 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000093 adj=31998891 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.30 cputime=51.548 memavail=3310676 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.3 pwm=0.000
Stats 1681.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3658 bytes_read=10411 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015954 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1014 bytes_read=5208 bytes_retransmit=0 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999597 adj=49997603 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1594 bytes_read=8185 bytes_retransmit=9 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997793 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.2 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=528 bytes_read=11779 bytes_retransmit=0 bytes_invalid=0 send_seq=88 receive_seq=88 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000100 adj=31998900 coil_temp=21.8 refs=0 mcu_temp=24.41 supply_voltage=2.995 sysload=0.35 cputime=51.573 memavail=3310676 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1682.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3664 bytes_read=10514 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015941 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1020 bytes_read=5224 bytes_retransmit=0 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999593 adj=49997581 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1600 bytes_read=8317 bytes_retransmit=9 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000367 adj=63997787 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=534 bytes_read=12135 bytes_retransmit=0 bytes_invalid=0 send_seq=89 receive_seq=89 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000102 adj=31998932 coil_temp=21.8 refs=0 mcu_temp=24.41 supply_voltage=2.995 sysload=0.35 cputime=51.598 memavail=3310676 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1683.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3670 bytes_read=10646 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015982 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1026 bytes_read=5240 bytes_retransmit=0 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999600 adj=49997572 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1606 bytes_read=8420 bytes_retransmit=9 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997789 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=540 bytes_read=12491 bytes_retransmit=0 bytes_invalid=0 send_seq=90 receive_seq=90 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000104 adj=31998927 coil_temp=21.8 refs=0 mcu_temp=24.41 supply_voltage=2.995 sysload=0.35 cputime=51.624 memavail=3310424 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1684.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3676 bytes_read=10749 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015964 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1032 bytes_read=5256 bytes_retransmit=0 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999601 adj=49997592 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1612 bytes_read=8523 bytes_retransmit=9 bytes_invalid=0 send_seq=184 receive_seq=184 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000367 adj=63997761 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=546 bytes_read=12847 bytes_retransmit=0 bytes_invalid=0 send_seq=91 receive_seq=91 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000104 adj=31998890 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.35 cputime=51.650 memavail=3310424 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1685.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3682 bytes_read=10852 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015942 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1038 bytes_read=5272 bytes_retransmit=0 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999606 adj=49997624 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1618 bytes_read=8655 bytes_retransmit=9 bytes_invalid=0 send_seq=185 receive_seq=185 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997777 Octopus_Pro_H723_V1.1: temp=34.1 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=552 bytes_read=13221 bytes_retransmit=0 bytes_invalid=0 send_seq=92 receive_seq=92 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000107 adj=31998886 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.35 cputime=51.676 memavail=3310172 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1686.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3688 bytes_read=10998 bytes_retransmit=9 bytes_invalid=0 send_seq=323 receive_seq=323 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015922 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1044 bytes_read=5301 bytes_retransmit=0 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999605 adj=49997681 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1624 bytes_read=8772 bytes_retransmit=9 bytes_invalid=0 send_seq=186 receive_seq=186 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000366 adj=63997825 Octopus_Pro_H723_V1.1: temp=34.1 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=558 bytes_read=13577 bytes_retransmit=0 bytes_invalid=0 send_seq=93 receive_seq=93 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000132 adj=31998911 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.33 cputime=51.701 memavail=3310172 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1687.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3694 bytes_read=11101 bytes_retransmit=9 bytes_invalid=0 send_seq=324 receive_seq=324 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015904 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1050 bytes_read=5317 bytes_retransmit=0 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999607 adj=49997671 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1630 bytes_read=8875 bytes_retransmit=9 bytes_invalid=0 send_seq=187 receive_seq=187 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000364 adj=63997835 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=564 bytes_read=13933 bytes_retransmit=0 bytes_invalid=0 send_seq=94 receive_seq=94 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000132 adj=31999098 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.33 cputime=51.726 memavail=3310172 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1688.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3700 bytes_read=11204 bytes_retransmit=9 bytes_invalid=0 send_seq=325 receive_seq=325 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015933 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1056 bytes_read=5333 bytes_retransmit=0 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999606 adj=49997698 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1636 bytes_read=9007 bytes_retransmit=9 bytes_invalid=0 send_seq=188 receive_seq=188 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997836 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=570 bytes_read=14289 bytes_retransmit=0 bytes_invalid=0 send_seq=95 receive_seq=95 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000133 adj=31999054 coil_temp=21.8 refs=0 mcu_temp=24.40 supply_voltage=2.995 sysload=0.33 cputime=51.751 memavail=3310172 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1689.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3706 bytes_read=11331 bytes_retransmit=9 bytes_invalid=0 send_seq=326 receive_seq=326 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015916 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1062 bytes_read=5349 bytes_retransmit=0 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999601 adj=49997638 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1642 bytes_read=9110 bytes_retransmit=9 bytes_invalid=0 send_seq=189 receive_seq=189 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997779 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=576 bytes_read=14645 bytes_retransmit=0 bytes_invalid=0 send_seq=96 receive_seq=96 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000130 adj=31998990 coil_temp=21.8 refs=0 mcu_temp=24.41 supply_voltage=2.995 sysload=0.33 cputime=51.776 memavail=3310172 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1690.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3712 bytes_read=11434 bytes_retransmit=9 bytes_invalid=0 send_seq=327 receive_seq=327 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015943 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000013 bytes_write=1068 bytes_read=5365 bytes_retransmit=0 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999601 adj=49997609 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1648 bytes_read=9213 bytes_retransmit=9 bytes_invalid=0 send_seq=190 receive_seq=190 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997796 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=582 bytes_read=15001 bytes_retransmit=0 bytes_invalid=0 send_seq=97 receive_seq=97 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000128 adj=31998948 coil_temp=21.8 refs=0 mcu_temp=24.41 supply_voltage=2.995 sysload=0.33 cputime=51.801 memavail=3307400 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1691.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3718 bytes_read=11551 bytes_retransmit=9 bytes_invalid=0 send_seq=328 receive_seq=328 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015927 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1074 bytes_read=5394 bytes_retransmit=0 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999600 adj=49997575 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1654 bytes_read=9359 bytes_retransmit=9 bytes_invalid=0 send_seq=191 receive_seq=191 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997800 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=588 bytes_read=15357 bytes_retransmit=0 bytes_invalid=0 send_seq=98 receive_seq=98 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000126 adj=31998888 coil_temp=21.8 refs=0 mcu_temp=24.41 supply_voltage=2.995 sysload=0.30 cputime=51.826 memavail=3307432 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1692.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3724 bytes_read=11683 bytes_retransmit=9 bytes_invalid=0 send_seq=329 receive_seq=329 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015909 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1080 bytes_read=5410 bytes_retransmit=0 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999600 adj=49997597 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1660 bytes_read=9462 bytes_retransmit=9 bytes_invalid=0 send_seq=192 receive_seq=192 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997827 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=594 bytes_read=15713 bytes_retransmit=0 bytes_invalid=0 send_seq=99 receive_seq=99 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000126 adj=31998872 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.30 cputime=51.852 memavail=3307432 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1693.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3730 bytes_read=11786 bytes_retransmit=9 bytes_invalid=0 send_seq=330 receive_seq=330 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015892 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1086 bytes_read=5426 bytes_retransmit=0 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999600 adj=49997614 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1666 bytes_read=9565 bytes_retransmit=9 bytes_invalid=0 send_seq=193 receive_seq=193 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000358 adj=63997846 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.3 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=600 bytes_read=16069 bytes_retransmit=0 bytes_invalid=0 send_seq=100 receive_seq=100 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000125 adj=31998884 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.30 cputime=51.877 memavail=3310880 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1694.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3736 bytes_read=11889 bytes_retransmit=9 bytes_invalid=0 send_seq=331 receive_seq=331 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015964 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1092 bytes_read=5442 bytes_retransmit=0 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999602 adj=49997638 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1672 bytes_read=9697 bytes_retransmit=9 bytes_invalid=0 send_seq=194 receive_seq=194 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997854 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=606 bytes_read=16425 bytes_retransmit=0 bytes_invalid=0 send_seq=101 receive_seq=101 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998877 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.30 cputime=51.902 memavail=3310712 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1695.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3742 bytes_read=12021 bytes_retransmit=9 bytes_invalid=0 send_seq=332 receive_seq=332 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015942 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1098 bytes_read=5458 bytes_retransmit=0 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999599 adj=49997562 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1678 bytes_read=9800 bytes_retransmit=9 bytes_invalid=0 send_seq=195 receive_seq=195 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997775 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=612 bytes_read=16781 bytes_retransmit=0 bytes_invalid=0 send_seq=102 receive_seq=102 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998926 coil_temp=21.8 refs=0 mcu_temp=24.43 supply_voltage=2.995 sysload=0.30 cputime=51.927 memavail=3308808 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1696.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3748 bytes_read=12138 bytes_retransmit=9 bytes_invalid=0 send_seq=333 receive_seq=333 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015944 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1104 bytes_read=5487 bytes_retransmit=0 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999598 adj=49997572 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1684 bytes_read=9903 bytes_retransmit=9 bytes_invalid=0 send_seq=196 receive_seq=196 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997805 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=618 bytes_read=17137 bytes_retransmit=0 bytes_invalid=0 send_seq=103 receive_seq=103 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000139 adj=31998923 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.27 cputime=51.953 memavail=3308808 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1697.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3754 bytes_read=12241 bytes_retransmit=9 bytes_invalid=0 send_seq=334 receive_seq=334 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015934 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1110 bytes_read=5503 bytes_retransmit=0 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999598 adj=49997573 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1690 bytes_read=10049 bytes_retransmit=9 bytes_invalid=0 send_seq=197 receive_seq=197 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997819 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=624 bytes_read=17493 bytes_retransmit=0 bytes_invalid=0 send_seq=104 receive_seq=104 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998933 coil_temp=21.8 refs=0 mcu_temp=24.43 supply_voltage=2.995 sysload=0.27 cputime=51.978 memavail=3309060 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1698.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3760 bytes_read=12373 bytes_retransmit=9 bytes_invalid=0 send_seq=335 receive_seq=335 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015924 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1116 bytes_read=5519 bytes_retransmit=0 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999597 adj=49997592 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1696 bytes_read=10152 bytes_retransmit=9 bytes_invalid=0 send_seq=198 receive_seq=198 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000364 adj=63997863 Octopus_Pro_H723_V1.1: temp=34.1 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=630 bytes_read=17849 bytes_retransmit=0 bytes_invalid=0 send_seq=105 receive_seq=105 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000136 adj=31998901 coil_temp=21.8 refs=0 mcu_temp=24.43 supply_voltage=2.995 sysload=0.27 cputime=52.002 memavail=3310688 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1699.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3766 bytes_read=12474 bytes_retransmit=9 bytes_invalid=0 send_seq=336 receive_seq=336 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015907 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1122 bytes_read=5535 bytes_retransmit=0 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999597 adj=49997603 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1702 bytes_read=10255 bytes_retransmit=9 bytes_invalid=0 send_seq=199 receive_seq=199 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000364 adj=63997859 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=636 bytes_read=18205 bytes_retransmit=0 bytes_invalid=0 send_seq=106 receive_seq=106 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000135 adj=31998894 coil_temp=21.8 refs=0 mcu_temp=24.44 supply_voltage=2.995 sysload=0.27 cputime=52.027 memavail=3310580 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.3 pwm=0.000
Stats 1700.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3772 bytes_read=12574 bytes_retransmit=9 bytes_invalid=0 send_seq=337 receive_seq=337 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015895 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1128 bytes_read=5551 bytes_retransmit=0 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999596 adj=49997619 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1708 bytes_read=10387 bytes_retransmit=9 bytes_invalid=0 send_seq=200 receive_seq=200 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997870 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=642 bytes_read=18561 bytes_retransmit=0 bytes_invalid=0 send_seq=107 receive_seq=107 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000134 adj=31998881 coil_temp=21.8 refs=0 mcu_temp=24.44 supply_voltage=2.995 sysload=0.27 cputime=52.052 memavail=3313796 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1701.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3778 bytes_read=12720 bytes_retransmit=9 bytes_invalid=0 send_seq=338 receive_seq=338 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015959 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1134 bytes_read=5580 bytes_retransmit=0 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999596 adj=49997625 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1714 bytes_read=10490 bytes_retransmit=9 bytes_invalid=0 send_seq=201 receive_seq=201 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997868 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.6 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=648 bytes_read=18917 bytes_retransmit=0 bytes_invalid=0 send_seq=108 receive_seq=108 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000134 adj=31998884 coil_temp=21.8 refs=0 mcu_temp=24.44 supply_voltage=2.995 sysload=0.25 cputime=52.077 memavail=3313800 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1702.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3784 bytes_read=12823 bytes_retransmit=9 bytes_invalid=0 send_seq=339 receive_seq=339 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015970 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1140 bytes_read=5596 bytes_retransmit=0 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999600 adj=49997542 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1720 bytes_read=10607 bytes_retransmit=9 bytes_invalid=0 send_seq=202 receive_seq=202 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000366 adj=63997741 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=654 bytes_read=19273 bytes_retransmit=0 bytes_invalid=0 send_seq=109 receive_seq=109 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000133 adj=31998826 coil_temp=21.8 refs=0 mcu_temp=24.44 supply_voltage=2.995 sysload=0.25 cputime=52.103 memavail=3313548 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1703.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3790 bytes_read=12926 bytes_retransmit=9 bytes_invalid=0 send_seq=340 receive_seq=340 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015954 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1146 bytes_read=5612 bytes_retransmit=0 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999599 adj=49997582 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1726 bytes_read=10739 bytes_retransmit=9 bytes_invalid=0 send_seq=203 receive_seq=203 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000366 adj=63997784 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=660 bytes_read=19629 bytes_retransmit=0 bytes_invalid=0 send_seq=110 receive_seq=110 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000134 adj=31998826 coil_temp=21.8 refs=0 mcu_temp=24.44 supply_voltage=2.995 sysload=0.25 cputime=52.128 memavail=3313300 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1704.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3796 bytes_read=13058 bytes_retransmit=9 bytes_invalid=0 send_seq=341 receive_seq=341 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015945 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1152 bytes_read=5628 bytes_retransmit=0 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999599 adj=49997599 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1732 bytes_read=10842 bytes_retransmit=9 bytes_invalid=0 send_seq=204 receive_seq=204 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997819 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=666 bytes_read=19985 bytes_retransmit=0 bytes_invalid=0 send_seq=111 receive_seq=111 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000133 adj=31998852 coil_temp=21.8 refs=0 mcu_temp=24.44 supply_voltage=2.995 sysload=0.25 cputime=52.153 memavail=3313300 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1705.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3802 bytes_read=13161 bytes_retransmit=9 bytes_invalid=0 send_seq=342 receive_seq=342 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015930 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1158 bytes_read=5644 bytes_retransmit=0 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999598 adj=49997605 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1738 bytes_read=10945 bytes_retransmit=9 bytes_invalid=0 send_seq=205 receive_seq=205 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000372 adj=63997822 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.0 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=672 bytes_read=20341 bytes_retransmit=0 bytes_invalid=0 send_seq=112 receive_seq=112 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000133 adj=31998854 coil_temp=21.8 refs=0 mcu_temp=24.44 supply_voltage=2.995 sysload=0.25 cputime=52.178 memavail=3313304 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.4 pwm=0.000
Stats 1706.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3808 bytes_read=13278 bytes_retransmit=9 bytes_invalid=0 send_seq=343 receive_seq=343 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015956 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1164 bytes_read=5673 bytes_retransmit=0 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999597 adj=49997615 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1744 bytes_read=11077 bytes_retransmit=9 bytes_invalid=0 send_seq=206 receive_seq=206 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000371 adj=63997913 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=678 bytes_read=20697 bytes_retransmit=0 bytes_invalid=0 send_seq=113 receive_seq=113 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000133 adj=31998868 coil_temp=21.8 refs=0 mcu_temp=24.45 supply_voltage=2.995 sysload=0.23 cputime=52.203 memavail=3313304 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1707.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3814 bytes_read=13410 bytes_retransmit=9 bytes_invalid=0 send_seq=344 receive_seq=344 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015943 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1170 bytes_read=5689 bytes_retransmit=0 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999596 adj=49997574 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1750 bytes_read=11194 bytes_retransmit=9 bytes_invalid=0 send_seq=207 receive_seq=207 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997834 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=684 bytes_read=21053 bytes_retransmit=0 bytes_invalid=0 send_seq=114 receive_seq=114 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998843 coil_temp=21.8 refs=0 mcu_temp=24.44 supply_voltage=2.995 sysload=0.23 cputime=52.228 memavail=3313052 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1708.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3820 bytes_read=13513 bytes_retransmit=9 bytes_invalid=0 send_seq=345 receive_seq=345 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015928 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1176 bytes_read=5705 bytes_retransmit=0 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999595 adj=49997585 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1756 bytes_read=11297 bytes_retransmit=9 bytes_invalid=0 send_seq=208 receive_seq=208 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997843 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.2 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=690 bytes_read=21393 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000149 adj=31999037 coil_temp=21.8 refs=0 mcu_temp=24.43 supply_voltage=2.995 sysload=0.23 cputime=52.253 memavail=3317372 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1709.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3826 bytes_read=13616 bytes_retransmit=9 bytes_invalid=0 send_seq=346 receive_seq=346 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015944 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1182 bytes_read=5721 bytes_retransmit=0 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999595 adj=49997599 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1762 bytes_read=11429 bytes_retransmit=9 bytes_invalid=0 send_seq=209 receive_seq=209 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000375 adj=63997845 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.4 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=696 bytes_read=21749 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31999005 coil_temp=21.8 refs=0 mcu_temp=24.43 supply_voltage=2.995 sysload=0.23 cputime=52.279 memavail=3316928 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1710.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3832 bytes_read=13742 bytes_retransmit=9 bytes_invalid=0 send_seq=347 receive_seq=347 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015932 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1188 bytes_read=5737 bytes_retransmit=0 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999596 adj=49997579 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1768 bytes_read=11532 bytes_retransmit=9 bytes_invalid=0 send_seq=210 receive_seq=210 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000376 adj=63997884 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=702 bytes_read=22105 bytes_retransmit=0 bytes_invalid=0 send_seq=117 receive_seq=117 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000160 adj=31998968 coil_temp=21.8 refs=0 mcu_temp=24.43 supply_voltage=2.995 sysload=0.23 cputime=52.304 memavail=3314560 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.4 pwm=0.000
Stats 1711.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3838 bytes_read=13844 bytes_retransmit=9 bytes_invalid=0 send_seq=348 receive_seq=348 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015961 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1194 bytes_read=5766 bytes_retransmit=0 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999596 adj=49997610 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1774 bytes_read=11635 bytes_retransmit=9 bytes_invalid=0 send_seq=211 receive_seq=211 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000373 adj=63997905 Octopus_Pro_H723_V1.1: temp=34.1 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=708 bytes_read=22461 bytes_retransmit=0 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31999068 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.21 cputime=52.329 memavail=3314560 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 1712.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3844 bytes_read=13961 bytes_retransmit=9 bytes_invalid=0 send_seq=349 receive_seq=349 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015966 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1200 bytes_read=5782 bytes_retransmit=0 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999595 adj=49997568 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1780 bytes_read=11773 bytes_retransmit=9 bytes_invalid=0 send_seq=212 receive_seq=212 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000373 adj=63997804 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=714 bytes_read=22817 bytes_retransmit=0 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000163 adj=31999027 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.21 cputime=52.355 memavail=3314560 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1713.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3850 bytes_read=14093 bytes_retransmit=9 bytes_invalid=0 send_seq=350 receive_seq=350 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015949 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1206 bytes_read=5798 bytes_retransmit=0 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999598 adj=49997564 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1786 bytes_read=11869 bytes_retransmit=9 bytes_invalid=0 send_seq=213 receive_seq=213 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000371 adj=63997790 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.5 raspberry_pi: temp=56.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=720 bytes_read=23173 bytes_retransmit=0 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000161 adj=31998991 coil_temp=21.8 refs=0 mcu_temp=24.42 supply_voltage=2.995 sysload=0.21 cputime=52.384 memavail=3311364 print_time=8.344 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1833.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=4582 bytes_read=27925 bytes_retransmit=9 bytes_invalid=0 send_seq=472 receive_seq=472 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015828 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1938 bytes_read=8050 bytes_retransmit=0 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999601 adj=49997606 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=2518 bytes_read=25706 bytes_retransmit=9 bytes_invalid=0 send_seq=335 receive_seq=335 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997834 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1452 bytes_read=65801 bytes_retransmit=0 bytes_invalid=0 send_seq=242 receive_seq=242 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000149 adj=31998881 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.09 cputime=55.381 memavail=3309628 print_time=187.909 buffer_time=0.242 print_stall=0 extruder: target=0 temp=4.4 pwm=0.000
Attempting MCU 'mcu' reset command
Attempting MCU 'rpi' config_reset command
b'Got EOF when reading from device'
Attempting MCU 'toolboard_t0' reset command
Attempting MCU 'beacon' reset command
webhooks client 3979023840: Disconnected
Restarting printer
Start printer at Mon Feb 16 01:59:25 2026 (1771207165.5 1835.3)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-pro-h723-11]
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=PG13,
z1_step_pin=PE2,
z1_dir_pin=PE3,
z1_enable_pin=PD4,
z1_uart_pin=PE1,
z1_diag_pin=PG14,
z2_step_pin=PE6,
z2_dir_pin=PA14,
z2_enable_pin=PE0,
z2_uart_pin=PD3,
z2_diag_pin=PG15,
z3_step_pin=PF9,
z3_dir_pin=PF10,
z3_enable_pin=PG2,
z3_uart_pin=PF2,
z3_diag_pin=PG12,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
e_power_draw_pin=null,
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,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PG15,
filament_sensor_motion_pin=PG14,
ratrig_vaoc_probe_pin=PG10,
ratrig_vaoc_led_pin=PB0,
ratrig_vaoc_fan_pin=PD13,
chamber_lighting_pin=PB11,
chamber_filter_4p_fan_pin=PD14,
chamber_filter_4p_fan_enable_pin=PD15
[mcu]
serial = /dev/RatOS/btt-octopus-pro-h723-11
[temperature_sensor Octopus_Pro_H723_V1.1]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_software_mosi_pin = PB5
spi_software_miso_pin = PB4
spi_software_sclk_pin = PB3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD3,
e_dir_pin=PD2,
e_enable_pin=PB6,
e_uart_pin=PB3,
e_heater_pin=PB0,
e_sensor_pin=PA1,
e_power_draw_pin=null,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB1,
bltouch_sensor_pin=PA5,
bltouch_control_pin=PA4,
probe_pin=PA5,
fan_part_cooling_pin=PB8,
fan_toolhead_cooling_pin=PB4,
fan_controller_board_pin=null,
heater_bed_heating_pin=null,
heater_bed_sensor_pin=null,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PA3,
filament_sensor_motion_pin=PA9,
ratrig_vaoc_probe_pin=null,
ratrig_vaoc_led_pin=null,
ratrig_vaoc_fan_pin=null,
chamber_lighting_pin=null,
chamber_filter_4p_fan_pin=null,
chamber_filter_4p_fan_enable_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-gen2-10-t0
[temperature_sensor EBB42_Gen2_v1.0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[lis2dw toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB1
spi_software_mosi_pin = toolboard_t0:PB11
spi_software_miso_pin = toolboard_t0:PB2
spi_software_sclk_pin = toolboard_t0:PB10
[gcode_macro RatOS]
variable_homing = "endstops"
variable_z_probe = "static"
variable_sensorless_x_current = 0.6
variable_sensorless_y_current = 0.9
variable_safe_home_x = "middle"
variable_safe_home_y = "middle"
variable_driver_type_x = "tmc2209"
variable_driver_type_y = "tmc2209"
variable_stowable_probe_stop_on_error = False
variable_chamber_filter_enable = True
variable_chamber_filter_speed = 0.5
variable_chamber_filter_disable_speed = 1.0
variable_chamber_filter_enable_at = "after_print_start"
variable_chamber_filter_disable_period = 300
variable_chamber_filter_disable_bed_temp = 0
variable_chamber_heater_enable = True
variable_chamber_heater_bed_temp = 115
variable_chamber_heater_preheating_temp = 150
variable_chamber_heater_heating_temp_offset = 25
variable_chamber_heater_control_external_heater = False
variable_chamber_heater_air_circulation_enable = True
variable_chamber_heater_air_circulation_fan_speed = 0.35
variable_chamber_heater_air_circulation_y_pos = 0
variable_chamber_heater_air_circulation_z_pos = 100
variable_chamber_heater_extra_fan_speed = 1.0
variable_chamber_heater_filter_fan_speed = 1.0
variable_led_status_action = 0.0,1.0,1.0
variable_led_status_success = 0.0,1.0,0.0
variable_led_status_error = 1.0,0.0,1.0
variable_led_status_on = 1.0,1.0,1.0
variable_led_status_off = 0.0,0.0,1.0
variable_led_status_standby = 0.1,0.1,0.1
variable_led_status_heating = 1.0,0.0,0.0
variable_led_status_cooling = 0.0,0.0,1.0
variable_calibrate_bed_mesh = True
variable_adaptive_mesh = True
variable_start_print_park_in = "front"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "front"
variable_end_print_park_z_hop = 20
variable_nozzle_priming = "primeblob"
variable_nozzle_prime_start_x = "max"
variable_nozzle_prime_start_y = "min"
variable_nozzle_prime_direction = "auto"
variable_nozzle_prime_bridge_fan = 102
variable_probe_for_priming_result = None
variable_probe_for_priming_end_result = None
variable_probe_for_priming_result_t1 = None
variable_probe_for_priming_end_result_t1 = None
variable_probe_for_priming_disable_mesh_constraints = False
variable_adaptive_prime_offset_threshold = -1.0
variable_last_z_offset = None
variable_runout_park_in = "front"
variable_enable_unload_tip_forming = False
variable_filament_unload_length = 150
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 = True
variable_preheat_extruder_temp = 150
variable_macro_travel_speed = 300
variable_macro_travel_accel = 3000
variable_macro_z_speed = 15
variable_bed_margin_x = [0, 0]
variable_bed_margin_y = [0, 0]
variable_printable_x_min = 0
variable_printable_x_max = 0
variable_printable_y_min = 0
variable_printable_y_max = 0
variable_end_print_motors_off = True
variable_status_color_ok = "00FF00"
variable_status_color_error = "FF0000"
variable_status_color_unknown = "FFFF00"
variable_end_print_retract_filament = 10
gcode =
ECHO_RATOS_VARS
variable_beacon_bed_mesh_scv = 25
variable_beacon_contact_z_homing = False
variable_beacon_contact_start_print_true_zero = True
variable_beacon_contact_start_print_true_zero_fuzzy_position = True
variable_beacon_contact_calibrate_model_on_true_zero = True
variable_beacon_contact_wipe_before_true_zero = True
variable_beacon_contact_wipe_before_true_zero_method = "probe_clean"
variable_beacon_contact_true_zero_temp = 170
variable_beacon_contact_prime_probing = True
variable_beacon_contact_expansion_compensation = True
variable_beacon_contact_bed_mesh = False
variable_beacon_contact_bed_mesh_samples = 2
variable_beacon_contact_z_tilt_adjust = False
variable_beacon_contact_z_tilt_adjust_samples = 2
variable_beacon_scan_compensation_enable = True
variable_beacon_scan_compensation_profile = "auto"
variable_beacon_scan_compensation_desired_spacing = 10
variable_beacon_scan_compensation_bed_temp_mismatch_is_error = False
variable_beacon_contact_poke_bottom_limit = -1
variable_beacon_scan_method_automatic = False
variable_beacon_adaptive_heat_soak_max_wait = 5400
variable_beacon_adaptive_heat_soak_extra_wait_after_completion = 0
variable_beacon_adaptive_heat_soak_layer_quality = 3
variable_beacon_adaptive_heat_soak_maximum_first_layer_duration = 1800
variable_beacon_contact_start_print_true_zero_fuzzy_radius = 20
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209"]
variable_y_axes = ["y"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2", "z3"]
[ratos_homing]
axes = xyz
z_hop = 15
z_hop_speed = 15
gcode =
_LED_ON
{% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set target_idex_mode = printer["dual_carriage"].carriage_1|lower %}
_IDEX_SINGLE
_SELECT_TOOL T={default_toolhead} TOOLSHIFT=false
{% endif %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True
M400
G90
{% set X = true if params.X is defined else false %}
{% set Y = true if params.Y is defined else false %}
{% set Z = true if params.Z is defined else false %}
{% if printer["gcode_macro RatOS"].home_y_first|default(false)|lower == 'true' %}
HOME_Y X={X} Y={Y} Z={Z}
HOME_X X={X} Y={Y} Z={Z}
{% else %}
HOME_X X={X} Y={Y} Z={Z}
HOME_Y X={X} Y={Y} Z={Z}
{% endif %}
HOME_Z X={X} Y={Y} Z={Z}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR
{% endif %}
{% endif %}
[gcode_macro HOME_X]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %}
{% set homing_x = homing_x if homing_x else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_X" MSG="printable_x_max: {printable_x_max}, safe_home_x: {safe_home_x}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}"
{% if X or not Y and not Z %}
{% if homing_x == 'endstop' %}
G28 X
{% elif homing_x == 'sensorless' %}
{% if printer["dual_carriage"] is defined %}
{ action_emergency_stop("sensorless homing not supported on IDEX!") }
{% endif %}
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 %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % (0 if default_toolhead==1 else 1)].parking_position|float %}
SET_DUAL_CARRIAGE CARRIAGE={0 if default_toolhead==1 else 1} MODE=PRIMARY
G1 X{parking_position} F{speed}
SET_DUAL_CARRIAGE CARRIAGE={default_toolhead} MODE=PRIMARY
{% endif %}
{% set x_homed = True %}
G0 X{safe_home_x} F{speed}
M400
{% endif %}
[gcode_macro HOME_Y]
gcode =
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %}
{% set homing_y = homing_y if homing_y else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Y" MSG="printable_y_max: {printable_y_max}, safe_home_y: {safe_home_y}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}"
{% if Y or not X and not Z %}
{% if homing_y == 'endstop' %}
G28 Y
{% elif homing_y == '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 %}
[gcode_macro HOME_Z]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% set beacon_contact_z_homing = true if printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_z_home_position_fuzzing_radius = printer["gcode_macro RatOS"].beacon_z_home_position_fuzzing_radius|default(0)|float %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Z" MSG="x_homed: {x_homed}, y_homed: {y_homed}, z_probe: {z_probe}, beacon_contact_z_homing: {beacon_contact_z_homing}"
{% if Z or not Y and not X %}
RATOS_ECHO MSG="Homing Z"
{% if x_homed == False or y_homed == False %}
{ action_emergency_stop("X and Y must be homed before homing Z") }
{% else %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_z_homing %}
{% if beacon_contact_start_print_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro HOME_X_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
G4 P300
G28 X
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
[gcode_macro HOME_Y_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
G4 P300
G28 Y
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
[gcode_macro _Z_HOP]
description = Move Z axis up by Z_HOP distance at Z_HOP_SPEED. In relative mode it will move Z axis up by Z_HOP distance. In absolute mode it will move Z axis to Z_HOP distance.
gcode =
{% set z_hop = printer.fastconfig.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro __MOVE_TO_SAFE_Z_HOME_ECHO_DEBUG]
gcode =
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="x: {params.X}, y: {params.Y}, z_hop: {params.Z_HOP}, fuzzy_radius: {params.FUZZY_RADIUS}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}, printable_x_max: {printer['gcode_macro RatOS'].printable_x_max}, printable_y_max: {printer['gcode_macro RatOS'].printable_y_max}"
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis. Specify ABL=1 to also ensure that automatic bed levelling is applied (if configured).
variable_is_kinematic_position_overriden = False
gcode =
{% set abl = params.ABL|default('')|lower in ('true', 'yes', '1') %}
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
RATOS_ECHO 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 %}
RATOS_ECHO MSG="Homing {axesToHome}"
G28 {axesToHome}
{% else %}
RATOS_ECHO MSG="All requested axes already homed. Skipping homing."
{% endif %}
{% endif %}
{% if abl %}
{% if printer.z_tilt is defined %}
{% if not printer.z_tilt.applied %}
RATOS_ECHO MSG="Performing Z tilt adjustment..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% else %}
RATOS_ECHO MSG="Z tilt already applied. Skipping Z tilt adjustment."
{% endif %}
{% elif printer.quad_gantry_level is defined %}
{% if not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Performing quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% else %}
RATOS_ECHO MSG="Quad gantry leveling already applied. Skipping quad gantry leveling."
{% endif %}
{% else %}
RATOS_ECHO MSG="No automatic bed leveling method configured. Skipping bed leveling."
{% endif %}
{% endif %}
[gcode_macro PID_CALIBRATE_HOTEND]
description = Perform a PID calibration test for a given extruder heater.
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set temp = params.TEMP|default(220)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_HOTEND" MSG="TEMP={temp}"
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO MSG="PID calibration hotend heater T0 at {temp}°C..."
PID_CALIBRATE HEATER=extruder TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
{% if toolhead==0 or toolhead==1 %}
RATOS_ECHO MSG="PID calibration hotend heater T{toolhead} at {temp}°C..."
PID_CALIBRATE HEATER=extruder{'' if toolhead==0 else toolhead} TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_BED]
description = Perform a PID calibration test for the bed heater.
gcode =
{% set temp = params.TEMP|default(80)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_BED" MSG="TEMP={temp}"
RATOS_ECHO MSG="PID calibration bed heater at {temp}°C..."
PID_CALIBRATE HEATER=heater_bed TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_CHAMBER_HEATER]
description = Perform a PID calibration test for the chamber heater.
gcode =
{% set temp = params.TEMP|default(150)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_CHAMBER_HEATER" MSG="TEMP={temp}"
{% if printer["heater_generic chamber_heater"] is defined %}
RATOS_ECHO MSG="PID calibration chamber heater at {temp}°C..."
PID_CALIBRATE HEATER=chamber_heater TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_heater" %}
{% set link_text = "RatOS Chamber Heater" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber heater found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro INITIALIZE_PA_TUNING]
description = Start a pressure advance tuning tower.
gcode =
{% set start = params.START|default(0.0)|float %}
{% set factor = params.FACTOR|default(0.001)|float %}
{% set layer_number = printer["gcode_macro _ON_LAYER_CHANGE"].layer_number|default(0)|int %}
{% set is_printing_gcode = true if printer["gcode_macro START_PRINT"].is_printing_gcode|default(true)|lower == 'true' else false %}
{% if is_printing_gcode and layer_number < 2 %}
DEBUG_ECHO PREFIX="START_PA_TOWER" MSG="START: {start}, FACTOR: {factor}"
RATOS_ECHO MSG="Starting pressure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% else %}
RATOS_ECHO MSG="Pressure advance tuning tower requires you to be printing gcode and on layer 1 to start."
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro CHAMBER_FILTER_ON]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro CHAMBER_FILTER_OFF]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Deactivating chamber filter..."
_CHAMBER_FILTER_TURN_OFF
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro _CHAMBER_FILTER_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set chamber_filter_enable_at = printer["gcode_macro RatOS"].chamber_filter_enable_at|default('after_print_start')|lower %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_ON" MSG="at: {at}, chamber_filter_enable: {chamber_filter_enable}, chamber_filter_enable_at: {chamber_filter_enable_at}, chamber_filter_speed: {chamber_filter_speed}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if chamber_filter_enable_at == at %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON AT={at}
{% if chamber_filter_enable_at == "print_end" %}
_LED_CHAMBER_FILTER_ON
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_FILTER_OFF]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF" MSG="chamber_filter_enable: {chamber_filter_enable}, filter_disable_period: {filter_disable_period}, filter_disable_bed_temp: {filter_disable_bed_temp}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_period > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting {filter_disable_period} seconds before turning chamber filter off..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION={filter_disable_period}
{% endif %}
{% if filter_disable_bed_temp > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting for bed temp to cool down to {filter_disable_bed_temp}°C to turn filter off..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=0 MAXIMUM={filter_disable_bed_temp}
_CHAMBER_FILTER_TURN_OFF
_LED_CHAMBER_FILTER_OFF
{% endif %}
{% endif %}
[delayed_gcode _CHAMBER_FILTER_OFF_TIMER]
gcode =
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF_TIMER" MSG="executed"
_CHAMBER_FILTER_TURN_OFF
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Chamber filter turned off!"
_LED_CHAMBER_FILTER_OFF
[gcode_macro _CHAMBER_FILTER_TURN_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_speed|default(0)|float %}
{% if at == "print_end" %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_disable_speed|default(0)|float %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION=0
SET_FAN_SPEED FAN=filter SPEED={chamber_filter_speed}
[gcode_macro _CHAMBER_FILTER_TURN_OFF]
gcode =
SET_FAN_SPEED FAN=filter SPEED=0
[gcode_macro _CHAMBER_FILTER_SANITY_CHECK]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_bed_temp > 0 and filter_disable_period > 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable, not both.")}
{% endif %}
{% if filter_disable_bed_temp == 0 and filter_disable_period == 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable.")}
{% endif %}
{% endif %}
[gcode_macro CHAMBER_HEATER_ON]
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(45)|int %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp} IS_FROM_START_PRINT=False
[gcode_macro CHAMBER_HEATER_OFF]
gcode =
_CHAMBER_HEATER_OFF
[gcode_macro _CHAMBER_HEATER_ON]
variable_chamber_temp = 0
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set is_from_start_print = true if params.IS_FROM_START_PRINT|default(True)|lower == 'true' else false %}
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set chamber_heater_enable = true if printer["gcode_macro RatOS"].chamber_heater_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
{% set chamber_heater_preheating_temp = printer["gcode_macro RatOS"].chamber_heater_preheating_temp|default(150)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set chamber_heater_control_external_heater = true if printer["gcode_macro RatOS"].chamber_heater_control_external_heater|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_enable = true if printer["gcode_macro RatOS"].chamber_heater_air_circulation_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_fan_speed = printer["gcode_macro RatOS"].chamber_heater_air_circulation_fan_speed|default(0.35)|float %}
{% set chamber_heater_air_circulation_y_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_y_pos|default(0)|float %}
{% set chamber_heater_air_circulation_z_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_z_pos|default(100)|float %}
DEBUG_ECHO PREFIX="_CHAMBER_HEATER_ON" MSG="chamber_heater_enable: {chamber_heater_enable}, chamber_heater_preheating_temp: {chamber_heater_preheating_temp}, chamber_heater_heating_temp_offset: {chamber_heater_heating_temp_offset}, bed_temp: {bed_temp}, chamber_temp: {chamber_temp}, start_chamber_temp: {start_chamber_temp}"
{% if chamber_heater_enable and chamber_temp > 0 and chamber_heater_bed_temp > 0 %}
_LED_HEATING
RATOS_ECHO MSG="Preheating chamber to {(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}°C..."
{% set chamber_temp_sensor = "extruder" %}
{% if printer["dual_carriage"] is defined and default_toolhead == 1 %}
{% set chamber_temp_sensor = "extruder1" %}
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% set chamber_temp_sensor = "temperature_sensor chamber" %}
{% endif %}
{% set current_chamber_temp = printer['%s' % chamber_temp_sensor].temperature|int %}
{% set needs_heating = current_chamber_temp < (start_chamber_temp if start_chamber_temp > 0 else chamber_temp) %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_BEFORE_PREHEATING
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
{% if not is_from_start_print %}
MAYBE_HOME
{% endif %}
G0 Z{chamber_heater_air_circulation_z_pos} F{z_speed}
G0 Y{chamber_heater_air_circulation_y_pos} F{speed}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 1 else 0}
{% else %}
M106 S{(255 * chamber_heater_air_circulation_fan_speed)}
{% endif %}
{% else %}
{% if is_from_start_print %}
G0 Z{z} F{z_speed}
{% endif %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE={chamber_temp}
{% if needs_heating %}
M140 S{chamber_heater_bed_temp}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={chamber_heater_preheating_temp}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if needs_heating %}
_CHAMBER_HEATER_EXTRA_FAN_ON
{% endif %}
{% if needs_heating %}
TEMPERATURE_WAIT SENSOR="{chamber_temp_sensor}" MINIMUM={(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% endif %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED=0
_CHAMBER_FILTER_ON AT="before_print_start"
{% endif %}
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
G28 Z
{% endif %}
{% endif %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_AFTER_PREHEATING
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% if printer["heater_generic chamber_heater"] is defined %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined and chamber_heater_control_external_heater %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
_LED_SUCCESS
{% endif %}
[gcode_macro _CHAMBER_HEATER_OFF]
gcode =
RATOS_ECHO MSG="Deactivating chamber heater..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=0
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE=0
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
_CHAMBER_HEATER_EXTRA_FAN_OFF
[delayed_gcode _CHAMBER_HEATER_CONTROL]
initial_duration = 0.
gcode =
{% set chamber_temp = printer["gcode_macro _CHAMBER_HEATER_ON"].chamber_temp|default(0)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set current_chamber_temp = printer['temperature_sensor chamber'].temperature|int %}
{% if current_chamber_temp < chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if current_chamber_temp >= chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON]
gcode =
{% set chamber_heater_extra_fan_speed = printer["gcode_macro RatOS"].chamber_heater_extra_fan_speed|default(0.0)|float %}
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
{% if chamber_heater_extra_fan_speed > 0 %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED={chamber_heater_extra_fan_speed}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF]
gcode =
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED=0
{% endif %}
[gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING]
description = Will be executed before chamber preheating, only if heating is needed.
gcode =
[gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING]
description = Will be executed after chamber preheating, only if heating was needed.
gcode =
[gcode_macro _LED_START_PRINTING]
gcode =
_LED_ACTION
[gcode_macro _LED_START_PRINTING_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_PRINTING]
gcode =
_LED_ON TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_PAUSE]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_ON]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_OFF]
gcode =
_LED_STANDBY
[gcode_macro _LED_LOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_LOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_RUNOUT]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_CLOG]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_UNLOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_UNLOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_DEACTIVATE_TOOLHEAD]
gcode =
_LED_OFF TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_STANDBY]
gcode =
_LED_STANDBY TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_WAKEUP]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_MOTORS_OFF]
gcode =
_LED_STANDBY
_LED_VAOC_OFF
[gcode_macro _LED_INPUT_SHAPER_START]
gcode =
_LED_ACTION
[gcode_macro _LED_INPUT_SHAPER_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_START]
gcode =
_LED_ACTION
[gcode_macro _LED_BEACON_CALIBRATION_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_VAOC_ON]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=1.0 GREEN=1.0 BLUE=1.0
{% endif %}
[gcode_macro _LED_VAOC_OFF]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=0.0 GREEN=0.0 BLUE=0.0
{% endif %}
[gcode_macro _LED_ACTION]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_action %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SUCCESS]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_success %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_HEATING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_heating %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_COOLING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_cooling %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ERROR]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_error %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ON]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_on %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_OFF]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_off %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_STANDBY]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_standby %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
{% if toolhead >= 0 %}
{% if printer['neopixel nozzle_led_t%s' % toolhead] is defined %}
SET_LED LED={'nozzle_led_t%s' % toolhead} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% else %}
{% if printer['neopixel nozzle_led_t0'] is defined %}
SET_LED LED={'nozzle_led_t0'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% if printer['neopixel nozzle_led_t1'] is defined %}
SET_LED LED={'nozzle_led_t1'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% endif %}
_USER_LED_SET { rawparams }
[gcode_macro _USER_LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% if filament_name == '' or filament_type == '' %}
{% set filament_name = 'unknown' %}
{% set filament_type = 'unknown' %}
{% endif %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_LOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_LOAD_FILAMENT]
description = Load filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_LOAD_FILAMENT" MSG="TEMP={temp}"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=load_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
_LOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
RESTORE_GCODE_STATE NAME=load_state
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament load routine complete, please check that the filament was loaded correctly."
[gcode_macro _IDEX_LOAD_FILAMENT]
description = Load filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament into T{toolhead}..."
DEBUG_ECHO PREFIX="_IDEX_LOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
_LOAD_FILAMENT TOOLHEAD={toolhead} TEMP={temp} AUTOMATED={automated}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="Filament load routine for T{toolhead} complete, please check that the filament was loaded correctly."
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default(false)|lower == 'true' %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into hotend.."
G92 E0
G0 E{extruder_gear_to_cooling_position_distance} F{extruder_load_speed}
G92 E0
M400
RATOS_ECHO MSG="Filament loaded into hotend."
[gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set load_speed = printer["gcode_macro T%s" % toolhead].filament_load_speed|float * 60 %}
{% set filament_loading_nozzle_offset = printer["gcode_macro T%s" % toolhead].filament_loading_nozzle_offset|float %}
{% set cooling_position_to_nozzle_distance = printer["gcode_macro T%s" % toolhead].cooling_position_to_nozzle_distance|float %}
{% set purge_after_load = printer["gcode_macro T%s" % toolhead].purge_after_load|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into nozzle... Please wait!"
G92 E0
G0 E{cooling_position_to_nozzle_distance + filament_loading_nozzle_offset} F{load_speed}
G92 E0
G4 P1000
_PURGE_FILAMENT TOOLHEAD={toolhead} E={purge_after_load}
RATOS_ECHO MSG="Filament loaded into nozzle!"
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
{% set filament_grabbing_length = printer["gcode_macro T%s" % toolhead].filament_grabbing_length|float %}
{% set filament_grabbing_speed = printer["gcode_macro T%s" % toolhead].filament_grabbing_speed|float %}
{% set resume_after_insert = true if printer["gcode_macro T%s" % toolhead].resume_after_insert|default(true)|lower == 'true' else false %}
{% set enable_insert_detection = true if printer["gcode_macro T%s" % toolhead].enable_insert_detection|default(true)|lower == 'true' else false %}
{% set current_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% if enable_insert_detection %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="toolhead: {toolhead}, filament_grabbing_length: {filament_grabbing_length}, filament_grabbing_speed: {filament_grabbing_speed}, current_idex_mode: {current_idex_mode}"
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
RATOS_ECHO MSG="Filament inserted into T{toolhead}, loading..."
FORCE_MOVE STEPPER={'extruder%s' % ('' if toolhead == 0 else toolhead)} DISTANCE={filament_grabbing_length} VELOCITY={filament_grabbing_speed}
M400
{% if printer.pause_resume.is_paused %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% if resume_after_insert %}
RESUME
{% endif %}
{% else %}
{% if not printer.virtual_sdcard.is_active %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
[gcode_macro _PURGE_BEFORE_UNLOAD]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set purge_before_unload = printer["gcode_macro T%s" % toolhead].purge_before_unload|float %}
DEBUG_ECHO PREFIX="_PURGE_BEFORE_UNLOAD" MSG="TOOLHEAD: {toolhead}"
{% if purge_before_unload > 0 %}
G92 E0
G0 E{purge_before_unload} F300
G92 E0
M400
{% endif %}
[gcode_macro _PURGE_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set e = params.E|int %}
{% set r = params.R|default(0)|int %}
DEBUG_ECHO PREFIX="_PURGE_FILAMENT" MSG="TOOLHEAD: {toolhead}, E: {e}"
{% if e > 0 %}
G92 E0
G0 E{e} F300
G92 E0
M400
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={0.4 if toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={0.4 if toolhead == 1 else 0}
{% else %}
M106 S{(255 * 0.4)}
{% endif %}
{% endif %}
G4 P3000
{% if r > 0 %}
G92 E0
G0 E-{r} F300
G92 E0
M400
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{loading_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CLEANING_MOVE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_CLEANING_MOVE" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].parking_position is defined and printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% set cleaning_position = loading_position %}
{% if loading_position == parking_position %}
{% if loading_position > 0 %}
{% set cleaning_position = loading_position - 30 %}
{% else %}
{% set cleaning_position = loading_position + 30 %}
{% endif %}
{% endif %}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _BED_MESH_SANITY_CHECK]
gcode =
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is defined %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_start_print_true_zero_fuzzy_position %}
CONSOLE_ECHO TYPE="error" TITLE="Defined zero reference not compatible with fuzzy true zero" MSG="Using fuzzy start print true zero position is not compatible with a defined zero_reference_position value in the [bed_mesh] section in printer.cfg._N_Please remove the zero_reference_position value from the [bed_mesh] section, or disable fuzzy true zero position in printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_start_print_true_zero_fuzzy_position: False"
_STOP_AND_RAISE_ERROR MSG="Defined zero reference not compatible with fuzzy true zero"
{% elif zero_ref_pos[0]|float|round != safe_home_x|float|round or zero_ref_pos[1]|float|round != safe_home_y|float|round %}
CONSOLE_ECHO TYPE="error" TITLE="Zero reference position does not match safe home position" MSG="Please update your bed mesh zero reference position in printer.cfg, like so:_N__N_[bed_mesh]_N_zero_reference_position: {safe_home_x|float|round},{safe_home_y|float|round}_N_"
_STOP_AND_RAISE_ERROR MSG="Zero reference position does not match safe home position"
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if beacon_contact_bed_mesh %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact bed mesh is enabled" MSG="Beacon contact bed mesh is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_bed_mesh: False"
{% endif %}
{% if beacon_scan_method_automatic %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon 'automatic' scan method is enabled" MSG="Beacon 'automatic' scan method is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_scan_method_automatic: False"
{% endif %}
{% if beacon_contact_z_tilt_adjust %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact z-tilt adjust is enabled" MSG="Beacon contact z-tilt adjust is enabled. This is not recommended for normal use and may result in inaccurate z-tilt adjustment._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_z_tilt_adjust: False"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH]
gcode =
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE=None
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE=None
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION {rawparams}
{% endif %}
[gcode_macro _START_PRINT_BED_MESH]
variable_actual_true_zero_position_x = None
variable_actual_true_zero_position_y = None
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
SET_MACRO_TRAVEL_SETTINGS
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set X=[params.X0|default(-1)|float, params.X1|default(-1)|float] %}
{% set Y=[params.Y0|default(-1)|float, params.Y1|default(-1)|float] %}
DEBUG_ECHO PREFIX="_START_PRINT_BED_MESH" MSG="idex_mode: {idex_mode}, X: {X}, Y: {Y}"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is not defined %}
{% set zero_ref_pos = [safe_home_x if actual_true_zero_position_x is none else actual_true_zero_position_x, safe_home_y if actual_true_zero_position_y is none else actual_true_zero_position_y] %}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set X=[0, printable_x_max] %}
{% endif %}
{% set beacon_bed_mesh_scv = printer["gcode_macro RatOS"].beacon_bed_mesh_scv|default(25)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and not beacon_contact_bed_mesh %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={beacon_bed_mesh_scv}
{% endif %}
{% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %}
{% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %}
BED_MESH_CLEAR
{% if printer["gcode_macro RatOS"].adaptive_mesh|lower == 'true' %}
CALIBRATE_ADAPTIVE_MESH PROFILE="{default_profile}" X0={X[0]} X1={X[1]} Y0={Y[0]} Y1={Y[1]} T={params.T|int} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={idex_mode} ZERO_REF_POS_X={zero_ref_pos[0]} ZERO_REF_POS_Y={zero_ref_pos[1]}
{% else %}
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD="{default_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD="{printer["gcode_macro RatOS"].bed_mesh_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
[gcode_macro CALIBRATE_ADAPTIVE_MESH]
gcode =
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set default_profile = params.PROFILE %}
{% set x0 = params.X0|default(-1)|float %}
{% set y0 = params.Y0|default(-1)|float %}
{% set x1 = params.X1|default(-1)|float %}
{% set y1 = params.Y1|default(-1)|float %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Received coordinates X0={x0|round(1)} Y0={y0|round(1)} X1={x1|round(1)} Y1={y1|round(1)}"
{% if x0 >= x1 or y0 >= y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Invalid coordinates received. Please check your slicer settings. Falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if params.ZERO_REF_POS_X is defined and params.ZERO_REF_POS_Y is defined %}
{% set zero_ref_pos_x = params.ZERO_REF_POS_X|float %}
{% set zero_ref_pos_y = params.ZERO_REF_POS_Y|float %}
{% if zero_ref_pos_x < x0 or zero_ref_pos_x > x1 or zero_ref_pos_y < y0 or zero_ref_pos_y > y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Zero reference position X={zero_ref_pos_x|round(1)} Y={zero_ref_pos_y|round(1)} is outside the mesh region, expanding mesh region to include it."
{% set x0 = [x0, zero_ref_pos_x]|min %}
{% set y0 = [y0, zero_ref_pos_y]|min %}
{% set x1 = [x1, zero_ref_pos_x]|max %}
{% set y1 = [y1, zero_ref_pos_y]|max %}
{% endif %}
{% endif %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float %}
{% set mesh_x0 = [[x0, max_x]|min, min_x]|max %}
{% set mesh_y0 = [[y0, max_y]|min, min_y]|max %}
{% set mesh_x1 = [[x1, max_x]|min, min_x]|max %}
{% set mesh_y1 = [[y1, max_y]|min, min_y]|max %}
{% if mesh_x0 == min_x and mesh_y0 == min_y and mesh_x1 == max_x and mesh_y1 == max_y %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Print is using the full bed, falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% set probe_count_x = mesh_config.probe_count.split(",")[0]|int %}
{% if mesh_config.probe_count.split(",")|length == 2 %}
{% set probe_count_y = mesh_config.probe_count.split(",")[1]|int %}
{% else %}
{% set probe_count_y = mesh_config.probe_count.split(",")[0]|int %}
{% endif %}
{% set probe_x_step = (max_x - min_x) / probe_count_x %}
{% set probe_y_step = (max_y - min_y) / probe_count_y %}
{% set mesh_count_x = ([(mesh_x1 - mesh_x0) / probe_x_step, 3]|max)|int %}
{% set mesh_count_y = ([(mesh_y1 - mesh_y0) / probe_y_step, 3]|max)|int %}
{% set min_mesh_count = [mesh_count_x, mesh_count_y]|min %}
{% set max_mesh_count = [mesh_count_x, mesh_count_y]|max %}
{% set algorithm = mesh_config.algorithm %}
{% if algorithm|lower == 'lagrange' and max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="cannot exceed a probe_count of 6 when using lagrange interpolation. Falling back to bicubic interpolation."
{% set algorithm = 'bicubic' %}
{% endif %}
{% if algorithm|lower == 'bicubic' and min_mesh_count < 4 %}
{% if max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="invalid probe_count option when using bicubic interpolation. Combination of 3 points on one axis with more than 6 on another is not permitted. Forcing minimum mesh count to be 4."
{% set min_mesh_count = 4 %}
{% else %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="bicubic interpolation with a probe_count of less than 4 points detected. Forcing lagrange interpolation."
{% set algorithm = 'lagrange' %}
{% endif %}
{% endif %}
{% set mesh_count_x = ([min_mesh_count, mesh_count_x]|max)|int %}
{% set mesh_count_x = ([max_mesh_count, mesh_count_x]|min)|int %}
{% set mesh_count_y = ([min_mesh_count, mesh_count_y]|max)|int %}
{% set mesh_count_y = ([max_mesh_count, mesh_count_y]|min)|int %}
{% set should_prime = printer["gcode_macro RatOS"].nozzle_priming == 'primeblob' %}
{% if printer["dual_carriage"] is not defined %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% else %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 == 0 and not probe_first %}
{% set probe_first = true %}
{% endif %}
{% if should_prime and probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="mesh coordinates X0={mesh_x0|round(1)} Y0={mesh_y0|round(1)} X1={mesh_x1|round(1)} Y1={mesh_y1|round(1)}"
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y} RELATIVE_REFERENCE_INDEX=-1
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% if should_prime and not probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M84]
rename_existing = M84.1
gcode =
M84.1
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_OFFSET X=0 Y=0
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=SET_PRESSURE_ADVANCE VARIABLE=snyc_toolheads VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro _VAOC"] is defined %}
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started VALUE=False
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started_at_temp VALUE=False
{% endif %}
_IDEX_SINGLE INIT=1
{% endif %}
SET_SKEW CLEAR=1
_LED_MOTORS_OFF
[gcode_macro M104]
rename_existing = M104.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
DEBUG_ECHO PREFIX="M104" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set temperature_offset_t0 = printer["gcode_macro T0"].temperature_offset|default(0)|int %}
{% set temperature_offset_t1 = printer["gcode_macro T1"].temperature_offset|default(0)|int %}
{% set s0 = [s + temperature_offset_t0, 0]|max %}
{% set s1 = [s + temperature_offset_t1, 0]|max %}
{% if temperature_offset_t0 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t0}°C added to toolhead T0."
{% endif %}
{% if temperature_offset_t1 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t1}°C added to toolhead T1."
{% endif %}
{% else %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% else %}
M104.1 S{s} T{t}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M109]
rename_existing = M109.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
DEBUG_ECHO PREFIX="M109" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M109" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
M109.1 S{s} T{t}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro SET_HEATER_TEMPERATURE]
rename_existing = SET_HEATER_TEMPERATURE_BASE
gcode =
{% set heater = params.HEATER|default("") %}
{% set target = params.TARGET|default(0)|int %}
DEBUG_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="heater: {heater}, target: {target}"
{% set t = -1 %}
{% if heater|lower == "extruder" or heater|lower == "extruder1" %}
{% set t = 0 if heater|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and target > 0 %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set target = [target + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
SET_HEATER_TEMPERATURE_BASE HEATER="{heater}" TARGET={target}
{% if t != -1 and printer.fastconfig.settings.beacon is defined %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro TEMPERATURE_WAIT]
rename_existing = TEMPERATURE_WAIT_BASE
gcode =
{% set sensor = params.SENSOR|default("") %}
{% set minimum = params.MINIMUM|default(-1)|int %}
{% set maximum = params.MAXIMUM|default(-1)|int %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="sensor: {sensor}, minimum: {minimum}, maximum: {maximum}"
{% set t = -1 %}
{% if sensor|lower == "extruder" or sensor|lower == "extruder1" %}
{% set t = 0 if sensor|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and (minimum > 0 or maximum > 0) %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% if minimum > -1 %}
{% set minimum = [minimum + temperature_offset, 0]|max %}
{% endif %}
{% if maximum > -1 %}
{% set maximum = [maximum + temperature_offset, 0]|max %}
{% endif %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set id = "sensor " ~ sensor if t == -1 else "toolhead T" ~ t %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum} MAXIMUM={maximum}
{% elif minimum > -1 and maximum == -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum}
{% elif minimum == -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% else %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="neither MINIMUM or MAXIMUM args were specified, call TEMPERATURE_WAIT_BASE is expected to fail"
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}"
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for {id} reached."
[gcode_macro SDCARD_PRINT_FILE]
rename_existing = SDCARD_PRINT_FILE_BASE
gcode =
{% if printer["ratos"] is defined %}
PROCESS_GCODE_FILE { rawparams }
{% else %}
SDCARD_PRINT_FILE_BASE { rawparams }
{% endif %}
[gcode_macro SKEW_PROFILE]
rename_existing = SKEW_PROFILE_BASE
variable_loaded_profile = ""
gcode =
{% if params.LOAD is defined %}
{% if printer.fastconfig.settings["skew_correction %s" % params.LOAD] is defined %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='"{params.LOAD}"'
{% endif %}
{% endif %}
SKEW_PROFILE_BASE { rawparams }
[gcode_macro SET_SKEW]
rename_existing = SET_SKEW_BASE
gcode =
{% if params.CLEAR is defined %}
{% if params.CLEAR|default(0)|int == 1 %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='""'
{% endif %}
{% endif %}
SET_SKEW_BASE { rawparams }
[gcode_macro SET_VELOCITY_LIMIT]
rename_existing = SET_VELOCITY_LIMIT_BASE
gcode =
{% if params.ACCEL_TO_DECEL is defined %}
{% if params.ACCEL is defined %}
{% set accel = params.ACCEL|float %}
{% else %}
{% set accel = printer.toolhead.max_accel|float %}
{% endif %}
{% if params.VELOCITY is defined %}
{% set velocity = params.VELOCITY|float %}
{% else %}
{% set velocity = printer.toolhead.max_velocity|float %}
{% endif %}
{% if params.SQUARE_CORNER_VELOCITY is defined %}
{% set scv = params.SQUARE_CORNER_VELOCITY|float %}
{% else %}
{% set scv = printer.toolhead.square_corner_velocity|float %}
{% endif %}
{% set mcr = params.ACCEL_TO_DECEL|float / accel %}
DEBUG_ECHO PREFIX="SET_VELOCITY_LIMIT" MSG="ACCEL={accel}, VELOCITY={velocity}, SQUARE_CORNER_VELOCITY={scv}, MINIMUM_CRUISE_RATIO={mcr}"
SET_VELOCITY_LIMIT_BASE ACCEL={accel} VELOCITY={velocity} SQUARE_CORNER_VELOCITY={scv} MINIMUM_CRUISE_RATIO={1-mcr}
{% else %}
SET_VELOCITY_LIMIT_BASE { rawparams }
{% endif %}
[gcode_macro BED_MESH_CALIBRATE]
rename_existing = _BED_MESH_CALIBRATE_BASE
variable_abl_and_home_z_if_required = True
gcode =
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% if abl_and_home_z_if_required %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set beacon_default_probe_method = printer.fastconfig.settings.beacon.default_probe_method|default('proximity') %}
{% set probe_method = params.PROBE_METHOD|default(beacon_default_probe_method)|lower %}
{% if probe_method == 'proximity' %}
_CHECK_ACTIVE_BEACON_MODEL_TEMP TITLE="Bed mesh calibration warning"
{% endif %}
{% endif %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_BED_MESH_CALIBRATE_BASE {rawparams}
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_APPLY_RATOS_BED_MESH_PARAMETERS {rawparams}
{% endif %}
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_BASE
gcode =
DEBUG_ECHO PREFIX="SET_GCODE_OFFSET" MSG="{rawparams|replace('"', '')|replace("'", '')}"
{% set z_before = printer.gcode_move.homing_origin.z|float %}
SET_GCODE_OFFSET_BASE {rawparams}
_AFTER_SET_GCODE_OFFSET Z_BEFORE={z_before}
[gcode_macro _AFTER_SET_GCODE_OFFSET]
gcode =
{% set z_before = params.Z_BEFORE|float %}
{% set z_after = printer.gcode_move.homing_origin.z|float %}
{% if z_before != z_after %}
_ALERT_NON_ZERO_Z_OFFSET FORCE=1
{% endif %}
[gcode_macro _START_PRINT_PARK]
gcode =
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_x = printer["gcode_macro RatOS"].start_print_park_x %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% endif %}
{% if printer["dual_carriage"] is defined and not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% if printer["gcode_macro RatOS"].start_print_park_x is defined and printer["gcode_macro RatOS"].start_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="start_print_park_x is ignored for IDEX printers"
{% endif %}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={start_print_park_in} X={start_print_park_x}
G0 Z{z} F{z_speed}
[gcode_macro _END_PRINT_PARK]
gcode =
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro RatOS"].end_print_park_x is defined and printer["gcode_macro RatOS"].end_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="end_print_park_x is ignored for IDEX printers"
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x}
[gcode_macro _PARK]
gcode =
{% set x = params.X %}
{% set location = params.LOCATION|default('back')|lower %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set nozzle_priming = printer["gcode_macro RatOS"].nozzle_priming|lower %}
CACHE_TOOLHEAD_SETTINGS KEY="park"
SET_MACRO_TRAVEL_SETTINGS
{% if x != '' %}
{% if x|float >= printer.toolhead.axis_minimum.x + 5 and x|float <= printable_x_max - 5 %}
{% set park_x = x|float %}
{% else %}
{action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% else %}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% set park_y = printable_y_max - 15 %}
{% if location == 'front' %}
{% set park_y = printer.toolhead.axis_minimum.y + 5 %}
{% elif location == 'center' %}
{% set park_y = printable_y_max / 2 %}
{% elif location == 'primeblob' and printer["dual_carriage"] is defined %}
{% set park_y = printable_y_max - 15 %}
{% endif %}
{% if location == 'primeblob' and printer["dual_carriage"] is not defined %}
{% if (nozzle_priming == 'primeblob' or nozzle_priming == 'primeline') %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set park_x = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set park_x = printable_x_max - 5 %}
{% else %}
{% set park_x = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set park_y = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set park_y = printable_y_max - 5 %}
{% else %}
{% set park_y = nozzle_prime_start_y|float %}
{% endif %}
{% endif %}
{% endif %}
G90
{% if printer["dual_carriage"] is not defined %}
G0 X{park_x} Y{park_y} F{speed}
{% else %}
G0 Y{park_y} F{speed}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="park"
[gcode_macro SAVE_PROBE_RESULT]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
{% set last_z_offset = 9999.9 %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set current_z = printer.toolhead.position.z|float %}
{% if beacon_contact_prime_probing %}
{% set last_z_offset = printer.beacon.last_z_result %}
{% else %}
{% set last_z_offset = printer.beacon.last_sample.dist - current_z %}
{% endif %}
{% elif printer.fastconfig.settings.bltouch is defined %}
{% set config_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set config_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Saving offset adjustment of {last_z_offset} in {params.VARIABLE|default('last_z_offset')}"
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE={params.VARIABLE|default('last_z_offset')} VALUE={last_z_offset}
[gcode_macro PROBE_FOR_PRIMING]
gcode =
{% set probe_for_priming_disable_mesh_constraints = true if printer["gcode_macro RatOS"].probe_for_priming_disable_mesh_constraints|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower != 'false' %}
SAVE_GCODE_STATE NAME=probe_for_priming_state
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the prime location.."
CACHE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
SET_MACRO_TRAVEL_SETTINGS
{% set t = params.TOOLHEAD|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% if idex_mode == '' %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% if t == 0 %}
{% set x_start = 5 %}
{% else %}
{% set x_start = printable_x_max - 5 %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% endif %}
{% endif %}
{% set z = printer.fastconfig.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% if printer.fastconfig.settings.bltouch is defined %}
{% set x_offset = printer.fastconfig.settings.bltouch.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.bltouch.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set x_offset = printer.fastconfig.settings.probe.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.probe.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% elif printer.fastconfig.settings.beacon is defined %}
{% set x_offset = printer.fastconfig.settings.beacon.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.beacon.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.beacon.trigger_distance|float %}
{% else %}
{ action_raise_error("No probe, beacon or bltouch section found. Adaptive priming only works with a [probe], [beacon] or [bltouch] section defined.") }
{% endif %}
{% if z < z_offset %}
{ action_raise_error("Horizontal move Z ({z}) is below your probe's Z offset ({z_offset}). Please adjust your horizontal_move_z setting in [bed_mesh] to be above {z}.") }
{% endif %}
{% if not probe_for_priming_disable_mesh_constraints %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float - x_offset %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float - y_offset %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float - x_offset %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float - y_offset %}
{% set x_start = [[x_start, max_x]|min, min_x]|max %}
{% set y_start = [[y_start, max_y]|min, min_y]|max %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the start of the prime location at {x_start}, {y_start}"
G90
M83
G0 Z{z} F{z_speed}
G1 X{x_start} Y{y_start} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result
{% endif %}
{% if idex_mode == '' %}
{% set x_end = x_start %}
{% set y_end = y_start + 45 %}
{% else %}
{% if t==1 %}
{% set x_end = x_start - 45 %}
{% else %}
{% set x_end = x_start + 45 %}
{% endif %}
{% set y_end = y_start %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the end of the prime location at {x_end}, {y_end}"
G1 X{x_end} Y{y_end} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result
{% endif %}
RESTORE_GCODE_STATE NAME=probe_for_priming_state
RESTORE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
{% endif %}
[gcode_macro RESET_PRIME_PROBE_STATE]
gcode =
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result VALUE=None
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result_t1 VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result_t1 VALUE=None
{% endif %}
[gcode_macro PROBE_CURRENT_POSITION]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
SAVE_GCODE_STATE NAME=probe_current_position_state
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
ASSERT_PROBE_DEPLOYED
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
BEACON_QUERY
{% else %}
RESTORE_GCODE_STATE NAME=probe_current_position_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_z_speed|float}
{% endif %}
[gcode_macro PRIME_BLOB]
description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro.
variable_x_offset = 5
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="prime_blob"
SET_MACRO_TRAVEL_SETTINGS
RATOS_ECHO PREFIX="Priming" MSG="Priming nozzle with prime blob.."
{% set current_toolhead = 0 %}
{% set target_idex_mode = '' %}
{% set extruder = 'extruder' %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE is defined %}
{% set target_idex_mode = params.IDEX_MODE|default('')|lower %}
{% else %}
{ action_raise_error("IDEX_MODE parameter not found for PRIME_BLOB macro. This is likely a bug.") }
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Priming in IDEX {target_idex_mode} mode.."
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set current_toolhead = 1 if current_idex_mode=='primary' else 0 %}
{% set extruder = 'extruder1' if current_toolhead == 1 else 'extruder' %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
SAVE_GCODE_STATE NAME=prime_blob_state
{% endif %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|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 fan_speed = printer["gcode_macro RatOS"].nozzle_prime_bridge_fan|float %}
{% set nozzle_diameter = printer.fastconfig.settings[extruder].nozzle_diameter|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set has_start_offset_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) != 9999.9 %}
{% if printer["dual_carriage"] is defined %}
{% set has_start_offset_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) != 9999.9 %}
{% endif %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_z_height = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set nozzle_prime_direction = printer["gcode_macro RatOS"].nozzle_prime_direction|lower %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% if target_idex_mode == '' %}
{% set x_factor = 0 %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% set y_factor = 1 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% set y_factor = -1 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% if nozzle_prime_start_y|float < printable_y_max / 2 %}
{% set y_factor = 1 %}
{% else %}
{% set y_factor = -1 %}
{% endif %}
{% endif %}
{% if nozzle_prime_direction == 'forwards' %}
{% set y_factor = 1 %}
{% elif nozzle_prime_direction == 'backwards' %}
{% set y_factor = -1 %}
{% endif %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% else %}
{% set z = start_print_park_z_height %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% set y_factor = 0 %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set x_start = center_x / 2 + 5 %}
{% set x_factor = 1 %}
{% else %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% if current_toolhead == 0 %}
{% set x_start = 55 %}
{% set x_factor = -1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 55 %}
{% set x_factor = 1 %}
{% endif %}
{% else %}
{% if current_toolhead == 0 %}
{% set x_start = 5 %}
{% set x_factor = 1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 5 %}
{% set x_factor = -1 %}
{% endif %}
{% endif %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_x_max - 5 %}
{% endif %}
{% set z = 10 %}
{% endif %}
{% set start_z_offset = 0 %}
{% set end_z_offset = 0 %}
{% if has_start_offset_t0 %}
{% set start_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %}
{% set end_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_end_result|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t0) ) }
{% endif %}
{% if end_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t0) ) }
{% endif %}
{% set start_z_offset = start_z_probe_result_t0 %}
{% set end_z_offset = end_z_probe_result_t0 %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if current_toolhead == 1 or both_toolheads or target_idex_mode == "copy" or target_idex_mode == "mirror" %}
{% if has_start_offset_t1 %}
{% set start_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) %}
{% set end_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_end_result_t1|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t1) ) }
{% endif %}
{% if end_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t1) ) }
{% endif %}
{% set start_z_offset = [start_z_offset, start_z_probe_result_t1]|max %}
{% set end_z_offset = [end_z_offset, start_z_probe_result_t1]|max %}
{% endif %}
{% endif %}
{% if target_idex_mode != 'copy' and target_idex_mode != 'mirror' %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% set original_start_z_offset = start_z_offset %}
{% set original_end_z_offset = end_z_offset %}
{% set start_z_offset = original_end_z_offset %}
{% set end_z_offset = original_start_z_offset %}
{% endif %}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
DEBUG_ECHO PREFIX="PRIME_BLOB" MSG="x_start: {x_start}, y_start: {y_start}, x_factor: {x_factor}, y_factor: {y_factor}, z: {z}, start_z_offset: {start_z_offset}, end_z_offset: {end_z_offset}"
G90
M83
RATOS_ECHO PREFIX="Priming" MSG="Lifting Z to {z}.."
G0 Z{z} F{z_speed}
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% if start_print_park_in != 'primeblob' %}
G1 X{x_start} F{speed}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% endif %}
{% else %}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% if target_idex_mode=="copy" or target_idex_mode=="mirror" %}
RATOS_ECHO PREFIX="Priming" MSG="Mirroring move to {x_start}, {y_start} along the edge of the print area.."
_IDEX_MIRROR PRIMING=1
{% else %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% endif %}
G1 X{x_start} F{speed}
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Starting prime blob.."
G1 Z{0.5 + start_z_offset} F{z_speed}
G1 Y{y_start} F{speed}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
M106 S{fan_speed}
G1 Z5 F100 E5
G92 E0
RATOS_ECHO PREFIX="Priming" MSG="Bridging with {((fan_speed/255) * 100)|int}% fan speed.."
G1 F3000 X{x_start + (15 * x_factor)} Y{y_start + (15 * y_factor)} E{1 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (20 * x_factor)} Y{y_start + (20 * y_factor)} Z{3.8 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (34 * x_factor)} Y{y_start + (34 * y_factor)} Z{2.6 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (38 * x_factor)} Y{y_start + (38 * y_factor)} Z{1.4 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (42 * x_factor)} Y{y_start + (42 * y_factor)} Z{0.2 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
M106 S0
G1 F3000 X{x_start + (46 * x_factor)} Y{y_start + (46 * y_factor)} Z{0.2 + end_z_offset} E0.6
G1 F{speed} X{x_start + (50 * x_factor)} Y{y_start + (50 * y_factor)}
{% if target_idex_mode == "copy" or target_idex_mode == "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if target_idex_mode == "copy" %}
{% if first_y >= 0 %}
_IDEX_COPY DANCE=0 Y={first_y}
{% else %}
_IDEX_COPY DANCE=0 Y={params.Y1}
{% endif %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
RESTORE_GCODE_STATE NAME=prime_blob_state
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="prime_blob"
G92 E0
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_UNLOAD_FILAMENT]
description = Unload filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_UNLOAD_FILAMENT" MSG="TEMP: {temp}"
_LED_UNLOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=unload_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD=0 NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
{% endif %}
RESTORE_GCODE_STATE NAME=unload_state
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament unloading completed"
[gcode_macro _IDEX_UNLOAD_FILAMENT]
description = Unload filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading T{toolhead} filament..."
DEBUG_ECHO PREFIX="_IDEX_UNLOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} AUTOMATED={automated}
{% endif %}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="T{toolhead} filament unloading completed"
[gcode_macro _UNLOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LEGACY_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 =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set unload_speed = 5 * 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 F6000
G0 E-15 F6000
G0 E-{unload_length} F{unload_speed}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Unloading filament from nozzle to cooling zone... Please wait!"
_PURGE_BEFORE_UNLOAD TOOLHEAD={toolhead}
{% if printer["gcode_macro _UNLOAD_WITHOUT_TIP_FORMING"] is defined %}
_UNLOAD_WITHOUT_TIP_FORMING TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
{% else %}
_UNLOAD_WITH_TIP_FORMING NAME='{filament_name}' TYPE='{filament_type}'
{% endif %}
G4 P3000
[gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
{% set tooolhead_sensor_to_extruder_gear_distance = printer["gcode_macro T%s" % toolhead].tooolhead_sensor_to_extruder_gear_distance|float %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER" MSG="TOOLHEAD: {toolhead}"
G0 E-{extruder_gear_to_cooling_position_distance + tooolhead_sensor_to_extruder_gear_distance + 50} F{extruder_load_speed}
RATOS_ECHO MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_WITH_TIP_FORMING]
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% if filament_name != '' and filament_type != '' %}
_UNLOAD_KNOWN_FILAMENT NAME={filament_name} TYPE={filament_type}
{% else %}
_UNLOAD_UNKNOWN_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _UNLOAD_KNOWN_FILAMENT]
description = User overrideable tip forming macro if slicer filament profiles are known
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
RATOS_ECHO PREFIX="FILAMENT TYPE" MSG='{filament_type}'
RATOS_ECHO PREFIX="FILAMENT PROFILE" MSG='{filament_name}'
{% if filament_name == "Prusament PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% elif filament_name == "Nobufil PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% else %}
RATOS_ECHO PREFIX="_UNLOAD_KNOWN_FILAMENT" MSG="Filament profile not found!"
_UNLOAD_UNKNOWN_FILAMENT
{% endif %}
[gcode_macro _UNLOAD_UNKNOWN_FILAMENT]
description = User overrideable standard tip forming macro
gcode =
DEBUG_ECHO PREFIX="_UNLOAD_UNKNOWN_FILAMENT" MSG="Using standard tip forming macro!"
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
[gcode_macro _TIP_FORMING]
gcode =
{% set cooling_moves = params.COOLING_MOVES|default(4)|int %}
{% set cooling_move_length = params.COOLING_MOVE_LENGTH|default(10)|float %}
{% set start_cooling_speed = params.START_COOLING_SPEED|default(10)|float * 60 %}
{% set end_cooling_speed = params.END_COOLING_SPEED|default(50)|float * 60 %}
{% if cooling_moves == 0 %}
{% set cooling_move_length = 0 %}
{% endif %}
{% set dip = true if params.DIP|default(false)|lower == "true" else false %}
{% set dip_length = params.DIP_LENGTH|default(22)|float %}
{% set dip_speed = params.DIP_SPEED|default(30)|float * 60 %}
{% set dip_retract_speed = params.DIP_RETRACT_SPEED|default(70)|float * 60 %}
{% set retract_length = params.RETRACT_LENGTH|default(18)|float %}
{% set start_retract_speed = params.START_RETRACT_SPEED|default(120)|float * 60 %}
{% set end_retract_speed = params.END_RETRACT_SPEED|default(20)|float * 60 %}
DEBUG_ECHO PREFIX="_TIP_FORMING" MSG="cooling_moves: {cooling_moves}, cooling_move_length: {cooling_move_length}, start_cooling_speed: {start_cooling_speed}, end_cooling_speed: {end_cooling_speed}, dip: {dip}, dip_length: {dip_length}, dip_speed: {dip_speed}, dip_retract_speed: {dip_retract_speed}, retract_length: {retract_length}, start_retract_speed: {start_retract_speed}, end_retract_speed: {end_retract_speed}"
M220 S100
G92 E0
{% set retract = retract_length + cooling_move_length / 2 - 15 %}
G1 E-15 F{start_retract_speed}
G1 E-{0.7 * retract} F{1.0 * end_retract_speed}
G1 E-{0.2 * retract} F{0.5 * end_retract_speed}
G1 E-{0.1 * retract} F{0.3 * end_retract_speed}
G92 E0
{% if cooling_moves > 0 %}
{% set i = (end_cooling_speed - start_cooling_speed) / (2 * cooling_moves - 1) %}
{% for m in range(cooling_moves) %}
G1 E{cooling_move_length} F{(start_cooling_speed + i * m * 2)}
G1 E-{cooling_move_length} F{(start_cooling_speed + i * (m * 2 + 1))}
{% endfor %}
{% endif %}
G92 E0
{% if dip %}
G1 E{dip_length} F{dip_speed}
G4 P100
G1 E-{dip_length} F{dip_retract_speed}
{% endif %}
G92 E0
M400
[delayed_gcode __ON_FILAMENT_SENSOR_BUTTON_PRESSED_STARTUP_GUARD]
initial_duration = 2.
gcode =
SET_GCODE_VARIABLE MACRO=_ON_FILAMENT_SENSOR_BUTTON_PRESSED VARIABLE=startup_complete VALUE=True
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
variable_startup_complete = False
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set toolhead_sensor_button_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_sensor_button_only_when_sensor_enabled|default(false)|lower == 'true' %}
{% if not startup_complete and sensor_enabled %}
{action_emergency_stop("RatOS: The T%s filament sensor button was triggered immediately on printer startup. This is likely a false trigger. Please check your filament sensor wiring and configuration!" % (toolhead,))}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}, SENSOR_ENABLED: {sensor_enabled}, TOOLHEAD_SENSOR_BUTTON_ONLY_WHEN_SENSOR_ENABLED: {toolhead_sensor_button_only_when_sensor_enabled}"
{% if not printer.virtual_sdcard.is_active and (sensor_enabled or not toolhead_sensor_button_only_when_sensor_enabled) %}
UNLOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
{% set toolhead_detect_clog_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_detect_clog_only_when_sensor_enabled|default(true)|lower == 'true' %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}, ENABLE_CLOG_DETECTION: {enable_clog_detection}, TOOLHEAD_DETECT_CLOG_ONLY_WHEN_SENSOR_ENABLED: {toolhead_detect_clog_only_when_sensor_enabled}, SENSOR_ENABLED: {sensor_enabled}"
{% if enable_clog_detection and (sensor_enabled or not toolhead_detect_clog_only_when_sensor_enabled) %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_FILAMENT_END]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set clogged = true if params.CLOGGED|default(false)|lower == 'true' else false %}
{% set unload_after_runout = printer["gcode_macro T%s" % toolhead].unload_after_runout|float %}
{% if clogged %}
_LED_FILAMENT_CLOG TOOLHEAD={toolhead}
{% else %}
_LED_FILAMENT_RUNOUT TOOLHEAD={toolhead}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_END" MSG="TOOLHEAD: {toolhead}"
{% if printer.virtual_sdcard.is_active %}
{% if not printer.pause_resume.is_paused %}
PAUSE RUNOUT=True
{% endif %}
{% if not clogged and unload_after_runout %}
UNLOAD_FILAMENT TOOLHEAD={toolhead} AUTOMATED=True
{% endif %}
{% if not clogged and printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true'%}
_JOIN_SPOOL TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M600]
description = Executes a color change by pausing the printer an unloading the filament.
gcode =
PAUSE
UNLOAD_FILAMENT AUTOMATED=True
RATOS_ECHO MSG="Please load new filament and resume"
[gcode_macro COLD_PULL]
description = Automated hotend cold pull.
gcode =
{% set extrusion_temp = params.EXTRUSION_TEMP|default(220)|int %}
{% set cold_pull_temp = params.COLD_PULL_TEMP|default(80)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% if printer["dual_carriage"] is not defined %}
{% set toolhead = 0 %}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead != 0 and toolhead != 1 %}
{action_raise_error("Please select toolhead! 0 = left, 1 = right toolhead")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
RATOS_ECHO MSG="Starting cold pull on T{toolhead}..."
{% else %}
RATOS_ECHO MSG="Starting cold pull..."
{% endif %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if printer["dual_carriage"] is defined and "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
RATOS_ECHO MSG="Heating T{toolhead} to {extrusion_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={extrusion_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={extrusion_temp} MAXIMUM={extrusion_temp + 2}
G4 P3000
RATOS_ECHO MSG="extruding..."
G92 E0
G1 E30 F300
G92 E0
RATOS_ECHO MSG="Cooling T{toolhead} to {cold_pull_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={cold_pull_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={cold_pull_temp} MAXIMUM={cold_pull_temp + 2}
G4 P10000
RATOS_ECHO MSG="cold pull..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-40 VELOCITY=5 ACCEL=100
RATOS_ECHO MSG="eject filament..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-200 VELOCITY=20 ACCEL=500
RATOS_ECHO MSG="cooling down extruder..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET=0
RESTORE_GCODE_STATE NAME=cold_pull_state
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
CONSOLE_ECHO TITLE="Cold pull complete" MSG="Please remove the filament from the PTFE tube and cut the end off. Do NOT try to load it again." TYPE="warning"
[gcode_macro _USER_START_PRINT_BEFORE_HOMING]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_BED]
gcode =
[gcode_macro _USER_START_PRINT_BED_MESH]
gcode =
[gcode_macro _USER_START_PRINT_PARK]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
[gcode_macro _USER_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 =
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
[gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_PARK]
gcode =
[gcode_macro _USER_END_PRINT_FINISHED]
description = User hook for when the print is finished after gcode state has been restored.
gcode =
[gcode_macro _USER_START_PRINT]
gcode =
[gcode_macro _USER_END_START_PRINT]
gcode =
[gcode_macro _USER_START_FEATURE]
gcode =
[gcode_macro _USER_END_FEATURE]
gcode =
[gcode_macro _USER_BEFORE_IDLE_TIMEOUT]
gcode =
[gcode_macro _USER_AFTER_IDLE_TIMEOUT]
gcode =
[gcode_macro ECHO_T_VARS]
description = Echo Toolhead variables to the console.
gcode =
{% set t = params.T|default(0) %}
RATOS_ECHO MSG="T{t} Variables"
{% for var, value in printer["gcode_macro T%s" % t].items() %}
{action_respond_info(var ~ ": " ~ value)}
{% endfor %}
[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 ENSURE_CRITICAL_RATOS_INIT]
variable_completed = False
gcode =
{% if not completed %}
CALCULATE_PRINTABLE_AREA
SET_GCODE_VARIABLE MACRO=ENSURE_CRITICAL_RATOS_INIT VARIABLE=completed VALUE=True
{% endif %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
{action_respond_info("Initializing RatOS...")}
ENSURE_CRITICAL_RATOS_INIT
_LED_STANDBY
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
{% if printer.fastconfig.settings.beacon is defined %}
_BED_MESH_SANITY_CHECK
{% endif %}
{% set svv = printer.save_variables.variables %}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=0 C={svv.nozzle_expansion_coefficient_t0|default(0.06)|float}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=1 C={svv.nozzle_expansion_coefficient_t1|default(0.06)|float}
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=idex_applied_offset
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
ENSURE_CRITICAL_RATOS_INIT
HELLO_RATOS
_ALERT_NON_ZERO_Z_OFFSET
[gcode_macro _ALERT_NON_ZERO_Z_OFFSET]
gcode =
{% set force = params.FORCE|default(0)|int == 1 %}
{% set user_offset = printer.named_offsets.user_probe_z_offset.z|float %}
{% set gcode_offset = printer.gcode_move.homing_origin.z|float %}
{% set combined_offset = user_offset + gcode_offset %}
{% if force or user_offset != 0 or gcode_offset != 0 %}
{% set title = "User-adjusted Z-offset of %.3f mm is active" % combined_offset %}
{% set msg = "" %}
{% set nl = "" %}
{% if user_offset != 0 %}
{% set msg = msg + "beacon true zero user Z-offset: %.3f mm (to clear, use Z_OFFSET_APPLY_PROBE CLEAR=1)" % user_offset %}
{% set nl = "_N_" %}
{% endif %}
{% if gcode_offset != 0 %}
{% set msg = msg + nl + "G-code Z-offset: %.3f mm" % gcode_offset %}
{% endif %}
CONSOLE_ECHO TITLE="{title}" TYPE="info" MSG="{msg}"
{% endif %}
[gcode_macro _INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE]
gcode =
{% set variable = params.VARIABLE|string %}
{% set svv = printer.save_variables.variables %}
{% set nlu_msg = "no longer used, please remove" %}
{% if svv[variable] is defined %}
{% set v = svv[variable]|string|replace('"', '')|replace("'", "") %}
{% if not nlu_msg in v %}
SAVE_VARIABLE VARIABLE={variable} VALUE='"{nlu_msg} (was {v})"'
{% endif %}
CONSOLE_ECHO TITLE="Deprecated ratos-variables.cfg variable" TYPE="warning" MSG="The variable {variable} is no longer used, please remove it from your ratos-variables.cfg file."
{% endif %}
[gcode_macro _NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK]
gcode =
{% set t = params.T|int %}
{% set c = params.C|float %}
{% set normal_low = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_low|default(0.05)|float %}
{% set normal_high = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_high|default(0.10)|float %}
{% if c < 0 %}
{action_emergency_stop("Invalid nozzle_expansion_coefficient_t%s value in ratos-variables.cfg: %.3f. It must be non-negative." % (t, c))}
{% endif %}
{% if c >= normal_high %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite high. Please verify that this is correct."
{% endif %}
{% if c <= normal_low %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite low. Please verify that this is correct."
{% endif %}
[gcode_macro INITIAL_FRONTEND_UPDATE]
gcode =
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_error = printer["gcode_macro RatOS"].status_color_error|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_unknown}"'
{% endif %}
{% set t0_sensor = "undefined" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].filament_detected|lower == "true" %}
{% set t0_sensor = "detected" %}
{% else %}
{% set t0_sensor = "empty" %}
{% endif %}
{% else %}
{% set t0_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set t1_sensor = "undefined" %}
{% if printer["dual_carriage"] is defined and printer["filament_switch_sensor toolhead_filament_sensor_t1"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].filament_detected|lower == "true" %}
{% set t1_sensor = "detected" %}
{% else %}
{% set t1_sensor = "empty" %}
{% endif %}
{% else %}
{% set t1_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% if svv.t0_filament is defined and printer["gcode_macro T0"] is defined %}
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
{% if t0_sensor != "empty" %}
{% set t0_filament_type = svv.t0_filament[0]|default('')|string %}
{% set t0_filament_name = svv.t0_filament[1]|default('')|string %}
{% set t0_filament_temp = svv.t0_filament[2]|default(0)|float %}
{% if t0_filament_name != '' and t0_filament_type != '' and t0_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{t0_filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{t0_filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={t0_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
{% if svv.t1_filament is defined and printer["gcode_macro T1"] is defined %}
{% if printer["gcode_macro T1"].filament_name is defined and printer["gcode_macro T1"].filament_type is defined and printer["gcode_macro T1"].filament_temp is defined %}
{% if t1_sensor != "empty" %}
{% set t1_filament_type = svv.t1_filament[0]|default('')|string %}
{% set t1_filament_name = svv.t1_filament[1]|default('')|string %}
{% set t1_filament_temp = svv.t1_filament[2]|default(0)|float %}
{% if t1_filament_name != '' and t1_filament_type != '' and t1_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='"{t1_filament_name}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='"{t1_filament_type}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE={t1_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t1_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro CALCULATE_PRINTABLE_AREA]
variable_calculated = False
gcode =
{% if not calculated %}
{% set bed_margin_x = printer["gcode_macro RatOS"].bed_margin_x %}
{% set bed_margin_y = printer["gcode_macro RatOS"].bed_margin_y %}
{% set tool = 0 if printer["gcode_macro T0"] is not defined or printer["gcode_macro T0"].active else 1 %}
{% set max_x = printer.toolhead.axis_maximum.x if printer["dual_carriage"] is defined and tool == 0 else printer.toolhead.axis_maximum.x - bed_margin_x[1] %}
{% if printer["dual_carriage"] is defined %}
{% set max_x = printer.toolhead.axis_maximum.x %}
{% endif %}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="printer.toolhead.axis_maximum.x {printer.toolhead.axis_maximum.x}"
{% set max_y = printer.toolhead.axis_maximum.y - bed_margin_y[1]%}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_x_max VALUE={max_x}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_y_max VALUE={max_y}
SET_GCODE_VARIABLE MACRO=CALCULATE_PRINTABLE_AREA VARIABLE=calculated VALUE=True
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
RATOS_LOG PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
{% endif %}
[gcode_macro CACHE_TOOLHEAD_SETTINGS]
variable_cache = {"global": {"accel": 1000, "ratio": 0.5, "speed": 50, "scv": 5}}
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set dummy = cache.__setitem__(key, {"accel": printer.toolhead.max_accel, "ratio": printer.toolhead.minimum_cruise_ratio, "speed": printer.toolhead.max_velocity, "scv": printer.toolhead.square_corner_velocity}) %}
SET_GCODE_VARIABLE MACRO=CACHE_TOOLHEAD_SETTINGS VARIABLE=cache VALUE="{cache | pprint | replace("\n", "") | replace("\"", "\\\"")}"
DEBUG_ECHO PREFIX="CACHE_TOOLHEAD_SETTINGS" MSG="Toolhead settings cached for {key}. {printer.toolhead.max_accel} accel, {printer.toolhead.minimum_cruise_ratio} ratio, {printer.toolhead.max_velocity} velocity, {printer.toolhead.square_corner_velocity} scv."
[gcode_macro RESTORE_TOOLHEAD_SETTINGS]
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set values = printer["gcode_macro CACHE_TOOLHEAD_SETTINGS"].cache.__getitem__(key) %}
{% if values is not defined or values == 'None' %}
{ action_raise_error("RESTORE_TOOLHEAD_SETTINGS: Toolhead settings not cached for key '" ~ key ~ "'.") }
{% endif %}
SET_VELOCITY_LIMIT ACCEL={values.accel} MINIMUM_CRUISE_RATIO={values.ratio} VELOCITY={values.speed} SQUARE_CORNER_VELOCITY={values.scv}
DEBUG_ECHO PREFIX="RESTORE_TOOLHEAD_SETTINGS" MSG="Toolhead settings restored. {values.accel} accel, {values.ratio} ratio, {values.speed} velocity, {values.scv} scv."
[gcode_macro SET_MACRO_TRAVEL_SETTINGS]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float %}
{% set accel = printer["gcode_macro RatOS"].macro_travel_accel %}
SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0.5 VELOCITY={speed} SQUARE_CORNER_VELOCITY={5}
DEBUG_ECHO PREFIX="SET_MACRO_TRAVEL_SETTINGS" MSG="Macro travel settings set. {accel} accel, {speed} velocity"
[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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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
{% if printer["dual_carriage"] is not defined %}
SET_KINEMATIC_POSITION X={printable_x_max / 2} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
{% else %}
IDEX_SET_CENTER_KINEMATIC_POSITION
{% endif %}
[gcode_macro IDEX_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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set center_x = printable_x_max / 2 %}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x - (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x + (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
[gcode_macro VERIFY_HYBRID_INVERTED]
gcode =
{% set inverted = False %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy is defined and printer.fastconfig.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy.inverted|lower == 'true' %}
{% set inverted = True %}
{% endif %}
{% endif %}
{% if inverted == False %}
{ action_emergency_stop("ratos_hybrid_corexy NOT INVERTED! Inverted hybrid core-xy bugfix not detected.") }
{% endif %}
[gcode_macro RATOS_ECHO]
gcode =
{% set prefix = "RatOS" %}
{% set debug = params.DEBUG|default(0)|int %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " | " ~ params.PREFIX %}
{% endif %}
{% set prefix = prefix ~ ":" %}
{% set msg = "" %}
{% if params.MSG is defined %}
{% set msg = params.MSG %}
{% else %}
{% set msg = "No msg parameter provided (this is a bug or unintended use)." %}
{% endif %}
{% if not debug %}
M117 {prefix} {msg}
{% endif %}
RATOS_LOG PREFIX="{prefix}" MSG="{msg}"
{% if not debug %}
RESPOND PREFIX="{prefix}" MSG="{msg}"
{% else %}
CONSOLE_ECHO TITLE="{prefix}" TYPE="debug" MSG="{msg}"
{% endif %}
[gcode_macro ENABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=True
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=prefix_filter VALUE="'{params.FILTER|default('')|lower}'"
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging enabled."
[gcode_macro DISABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=False
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging disabled."
[gcode_macro DEBUG_ECHO]
variable_enabled = False
variable_prefix_filter = ''
gcode =
{% set prefix = "DEBUG" %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " - " ~ params.PREFIX %}
{% endif %}
{% if enabled and (prefix_filter|lower == '' or prefix_filter|lower in params.PREFIX|lower) %}
RATOS_ECHO PREFIX="{prefix}" MSG="{params.MSG}" DEBUG=1
{% endif %}
[gcode_macro START_FEATURE]
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="Start {params.FEATURE} feature gcode"
{% set scv = printer.toolhead.square_corner_velocity|int|default(5) %}
{% set accel = printer.toolhead.max_accel|int|default(10000) %}
{% set ratio = printer.toolhead.minimum_cruise_ratio|float|default(0.5) %}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="scv" VALUE={scv}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="accel" VALUE={accel}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="ratio" VALUE={ratio}
_USER_START_FEATURE FEATURE="{params.FEATURE}"
[gcode_macro END_FEATURE]
variable_scv = 5
variable_accel = 10000
variable_ratio = 0.5
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="End {params.FEATURE} feature gcode"
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={scv} ACCEL={accel} MINIMUM_CRUISE_RATIO={ratio}
_USER_END_FEATURE FEATURE="{params.FEATURE}" SCV={scv} ACCEL={accel} RATIO={ratio}
[gcode_macro _ON_LAYER_CHANGE]
variable_layer_number = 0
description = INTERNAL USE ONLY. Call it from the slicers after layer change custom gcode
gcode =
{% set layer = params.LAYER|int %}
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE={layer}
SET_PRINT_STATS_INFO CURRENT_LAYER={layer}
[gcode_macro _LEARN_MORE_CALIBRATION]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/calibration" %}
{% set link_text = "RatOS Calibration Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_CHAMBER_FILTER]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter Control" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_FILAMENT]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/filaments" %}
{% set link_text = "RatOS Filament Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _CONSOLE_SAVE_CONFIG]
gcode =
M118 Click SAVE_CONFIG to save the settings to your printer.cfg.
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.fastconfig.config["skew_correction %s" % ratos_skew_profile] is defined %}
SKEW_PROFILE LOAD={ratos_skew_profile}
GET_CURRENT_SKEW
{% else %}
{% set line_1 = '"Could not find skew profile %s!_N_Clearing skew correction."' % ratos_skew_profile %}
CONSOLE_ECHO TITLE="Missing skew profile!" TYPE="warning" MSG={line_1}
SET_SKEW CLEAR=1
{% endif %}
{% endif %}
[gcode_macro M601]
gcode =
PAUSE
[gcode_macro _STOP_AND_RAISE_ERROR]
gcode =
M84
_RAISE_ERROR MSG="{params.MSG}"
[gcode_macro PAUSE]
description = Pauses the print
rename_existing = PAUSE_BASE
variable_extrude = 1.5
variable_retract = 1.5
variable_fan_speed = 0
variable_idex_mode = ""
variable_idex_toolhead = 0
variable_idex_toolhead_x = 0.0
variable_idex_toolhead_y = 0.0
variable_idex_toolhead_z = 0.0
gcode =
RATOS_ECHO MSG="Pausing print..."
{% set runout_detected = true if params.RUNOUT|default(false)|lower == 'true' else false %}
_LED_PAUSE
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
SAVE_GCODE_STATE NAME=PAUSE_state
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_mode VALUE='"{idex_mode}"'
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead VALUE={idex_toolhead}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_x VALUE={printer.gcode_move.gcode_position.x|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_y VALUE={printer.gcode_move.gcode_position.y|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_z VALUE={printer.gcode_move.gcode_position.z|float}
DEBUG_ECHO PREFIX="PAUSE" MSG="idex_mode: {idex_mode}, idex_toolhead: {idex_toolhead}, idex_toolhead_x: {idex_toolhead_x}, idex_toolhead_y: {idex_toolhead_y}, idex_toolhead_z: {idex_toolhead_z}"
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
CACHE_TOOLHEAD_SETTINGS KEY="pause"
SET_MACRO_TRAVEL_SETTINGS
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% if current_z < (max_z - 20.0) %}
{% set z_safe = 20.0 %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
PAUSE_BASE
{% if printer["dual_carriage"] is not defined %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan"].speed|float}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
{% if idex_toolhead == 0 %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t1"].speed|float}
{% endif %}
{% endif %}
{% endif %}
M106 S0
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set R = printer["gcode_macro PAUSE"].retract|float %}
{% if can_extrude %}
G91
G1 E-{R} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].pause_print_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].pause_print_park_in %}
{% if runout_detected %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].runout_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].runout_park_in %}
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
DEBUG_ECHO PREFIX="PAUSE" MSG="z_speed: {z_speed}, pause_print_park_x: {pause_print_park_x}, pause_print_park_in: {pause_print_park_in}, default_toolhead: {default_toolhead}"
{% if "xyz" in printer.toolhead.homed_axes %}
G91
G1 Z{z_safe} F{z_speed}
G90
{% if printer["dual_carriage"] is not defined %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% else %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
_IDEX_SINGLE X={parking_position}
{% else %}
PARK_TOOLHEAD
{% endif %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% endif %}
{% else %}
{action_respond_info("Printer not homed")}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="pause"
RATOS_ECHO MSG="Print paused"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
RATOS_ECHO MSG="Resuming print..."
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set target_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set target_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if target_idex_mode != '' %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set fan_speed = printer["gcode_macro PAUSE"].fan_speed|float %}
{% if printer["dual_carriage"] is not defined %}
M106 S{(fan_speed * 255)}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% else %}
{% if params.TOOLHEAD is defined %}
{% if params.TOOLHEAD == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% else %}
{% if printer["gcode_macro PAUSE"].idex_toolhead == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% endif %}
{% endif %}
M106.1 S{fan_speed}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY DANCE=0
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR DANCE=0
{% else %}
{% if params.TOOLHEAD is defined %}
_SELECT_TOOL T={params.TOOLHEAD} X=-1 Y=-1 TOOLSHIFT=false
{% else %}
_SELECT_TOOL T={printer["gcode_macro PAUSE"].idex_toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% endif %}
{% set x = printer["gcode_macro PAUSE"].idex_toolhead_x|float %}
{% set y = printer["gcode_macro PAUSE"].idex_toolhead_y|float %}
{% set z = printer["gcode_macro PAUSE"].idex_toolhead_z|float %}
G1 X{x} Y{y} Z{z} F{speed}
{% if params.TOOLHEAD is defined %}
SAVE_GCODE_STATE NAME=PAUSE_STATE
{% endif %}
{% endif %}
{% if params.TOOLHEAD is not defined %}
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
{% if can_extrude %}
G91
G1 E{E} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 MOVE_SPEED={speed}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
RESUME_BASE
_LED_PRINTING
RATOS_ECHO MSG="Print resumed"
[gcode_macro CANCEL_PRINT]
description = Cancels the print
rename_existing = CANCEL_PRINT_BASE
gcode =
RATOS_ECHO MSG="Cancelling print..."
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
RATOS_ECHO MSG="Print cancelled"
[gcode_macro START_PRINT]
description = Start print procedure, use this in your Slicer.
variable_post_processor_version = 2
variable_is_printing_gcode = False
variable_both_toolheads = True
variable_object_xoffset = 0
variable_first_x = -1
variable_first_y = -1
variable_total_toolshifts = 0
variable_initial_tool = 0
variable_extruder_first_layer_temp = ""
variable_extruder_other_layer_temp = ""
gcode =
{% if params.EXTRUDER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_TEMP parameter not found.")}
{% endif %}
{% if params.EXTRUDER_OTHER_LAYER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_OTHER_LAYER_TEMP parameter not found.")}
{% endif %}
{% if params.BED_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. BED_TEMP parameter not found.")}
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' and printer["gcode_macro RatOS"].danger_force_allow_auto_center_subject|default(false)|lower != 'true'%}
{ action_raise_error("The experimental auto_center_subject feature is not supported in this version of RatOS. Please disable it in the RatOS macro settings.") }
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes and printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% if printer["gcode_macro _VAOC"].is_started|default(true)|lower == 'true' %}
_VAOC_END
{% endif %}
{% endif %}
_LED_START_PRINTING
CACHE_TOOLHEAD_SETTINGS KEY="start_print"
_USER_START_PRINT { rawparams }
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_probe_stowable = printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
{% set X0 = params.X0|default(-1)|float %}
{% set X1 = params.X1|default(-1)|float %}
{% set Y0 = params.Y0|default(-1)|float %}
{% set Y1 = params.Y1|default(-1)|float %}
{% if first_x == -1 or first_y == -1 %}
{% set first_x = params.FIRST_X|default(-1)|float %}
{% set first_y = params.FIRST_Y|default(-1)|float %}
{% endif %}
{% set total_toolshifts = params.TOTAL_TOOLSHIFTS|default(0)|int %}
{% set initial_tool = params.INITIAL_TOOL|default(default_toolhead)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set bed_temp = params.BED_TEMP|default(printer.heater_bed.target, true)|float %}
{% set total_layer_count = params.TOTAL_LAYER_COUNT|default(0)|int %}
{% set extruder_first_layer_temp = (params.EXTRUDER_TEMP|default("")).split(",") %}
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL BEACON_CONTACT_START_PRINT_TRUE_ZERO={beacon_contact_start_print_true_zero} BEACON_CONTACT_CALIBRATE_MODEL_ON_TRUE_ZERO={beacon_contact_calibrate_model_on_true_zero}
{% endif %}
_START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH BED_TEMP={bed_temp}
RATOS_ECHO MSG="First print coordinates X:{first_x} Y:{first_y}"
{% if params.TOTAL_LAYER_COUNT is not defined %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Configuration" %}
{% set line_1 = '"Your slicer gcode settings are not up to date._N_Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Incomplete Slicer Configuration detected" TYPE="warning" MSG={line_1}
{% endif %}
SET_PRINT_STATS_INFO CURRENT_LAYER=1
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE=1
{% if total_layer_count > 0 %}
SET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set swap_toolheads = true if printer["gcode_macro _IDEX_REMAP_TOOLHEADS"].enabled|default(false)|lower == 'true' else false %}
{% if swap_toolheads %}
{% set initial_tool = 0 if initial_tool == 1 else 1 %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=active VALUE=True
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=active VALUE=True
{% endif %}
{% set both_toolheads = true %}
{% if total_toolshifts == 0 %}
{% set both_toolheads = false %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
{% endif %}
{% if both_toolheads and (idex_mode == "copy" or idex_mode == "mirror") %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Gcode tool changes found. Copy and mirror mode do not support toolchanges.")}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set both_toolheads = true %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=initial_tool VALUE={initial_tool}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_x VALUE={first_x}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_y VALUE={first_y}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=total_toolshifts VALUE={total_toolshifts}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=both_toolheads VALUE={both_toolheads}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_first_layer_temp VALUE="'{params.EXTRUDER_TEMP}'"
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_other_layer_temp VALUE="'{params.EXTRUDER_OTHER_LAYER_TEMP}'"
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_TOOLCHANGE VARIABLE=toolshift_count VALUE=0
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set svv = printer.save_variables.variables %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
{% set stepper_x_position_min = printer.fastconfig.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.fastconfig.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.fastconfig.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.fastconfig.settings.dual_carriage.position_endstop|float %}
{% set x_parking_space = parking_position_t0 - (stepper_x_position_endstop , stepper_x_position_min)|max %}
{% set dc_parking_space = (dual_carriage_position_endstop , dual_carriage_position_max)|min - parking_position_t1 %}
{% if svv.idex_xoffset|abs >= (x_parking_space - 0.5) or svv.idex_xoffset|abs >= (dc_parking_space - 0.5) %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Toolhead x-offset is too high for the available parking space. Calibrate your X and DC endstop positions and make sure you stay below 1mm." % (copy_mode_max_width)) }
{% endif %}
{% endif %}
{% if (idex_mode == "copy" or idex_mode == "mirror") and printer.fastconfig.settings.ratos.enable_gcode_transform %}
{% if params.MIN_X is not defined or params.MAX_X is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Something went wrong! Missing important post processor start print parameter!") }
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE=0
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set boundary_box_min_x = params.MIN_X|default(0)|float %}
{% set boundary_box_max_x = params.MAX_X|default(printable_x_max)|float %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
{% set boundary_box_max_x = boundary_box_max_x + svv.idex_xoffset %}
{% else %}
{% set boundary_box_min_x = boundary_box_min_x - svv.idex_xoffset %}
{% endif %}
{% set center_x = printable_x_max / 2.0 %}
{% set safe_distance = printer.fastconfig.settings.dual_carriage.safe_distance|float %}
{% set object_width = boundary_box_max_x - boundary_box_min_x %}
{% set copy_mode_max_width = center_x %}
{% set mirror_mode_max_width = center_x - safe_distance / 2.0 %}
DEBUG_ECHO PREFIX="START_PRINT" MSG="OBJECT_WIDTH: {object_width} BOUNDARY_BOX_MIN_X: {boundary_box_min_x} BOUNDARY_BOX_MAX_X: {boundary_box_max_x} CENTER_X: {center_x} SAFE_DISTANCE: {safe_distance}"
{% if idex_mode == "copy" and object_width > copy_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for copy mode! Max supported width is %s mm" % (copy_mode_max_width)) }
{% endif %}
{% if idex_mode == "mirror" and object_width > mirror_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for mirror mode! Max supported width is %s mm" % (mirror_mode_max_width)) }
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = (printable_x_max - boundary_box_max_x - boundary_box_min_x) / 2 %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE={object_xoffset}
{% endif %}
{% endif %}
{% set has_initial_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_initial_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined and both_toolheads %}
{% set has_secondary_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_secondary_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% endif %}
_CHAMBER_FILTER_ON AT="before_print_start"
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true' %}
{% if both_toolheads %}
RATOS_ECHO MSG="Spool join is not possible if both toolheads are in use!"
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
CLEAR_PAUSE
{% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %}
G90
{% endif %}
SAVE_GCODE_STATE NAME=start_print_state
G21
G90
M82
_USER_START_PRINT_BEFORE_HOMING { rawparams }
{% if z_probe_stowable == true %}
STOWABLE_PROBE_BEGIN_BATCH
{% endif %}
MAYBE_HOME
_Z_HOP
{% if idex_mode != '' and not (printer.fastconfig.settings.beacon is defined and (beacon_contact_start_print_true_zero or beacon_adaptive_heat_soak)) %}
PARK_TOOLHEAD
{% endif %}
{% if chamber_temp > 0 %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED={printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float}
{% endif %}
{% endif %}
_CHAMBER_HEATER_ON START_CHAMBER_TEMP={start_chamber_temp} CHAMBER_TEMP={chamber_temp}
_USER_START_PRINT_HEAT_CHAMBER { rawparams } CHAMBER_TEMP={chamber_temp}
{% endif %}
_START_PRINT_BEFORE_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
RATOS_ECHO MSG="Heating bed..."
M190 S{bed_temp}
{% if printer.fastconfig.settings.beacon is defined and beacon_adaptive_heat_soak %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK LAYER_QUALITY={beacon_adaptive_heat_soak_layer_quality} MAXIMUM_FIRST_LAYER_DURATION={beacon_adaptive_heat_soak_maximum_first_layer_duration} MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={beacon_adaptive_heat_soak_max_wait}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_BED { rawparams }
_START_PRINT_AFTER_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
_USER_START_PRINT_BED_MESH { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_BED_MESH X0={X0} X1={X1} Y0={Y0} Y1={Y1} T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if z_probe_stowable == true %}
STOWABLE_PROBE_END_BATCH
{% endif %}
{% if idex_mode == '' %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[initial_tool]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[0]|float}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={extruder_first_layer_temp[1]|float}
{% endif %}
{% endif %}
_USER_START_PRINT_PARK { rawparams }
_START_PRINT_PARK
RATOS_ECHO MSG="Heating Extruder..."
{% if idex_mode == '' %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[initial_tool]|float} MAXIMUM={extruder_first_layer_temp[initial_tool]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder1" MINIMUM={extruder_first_layer_temp[1]|float} MAXIMUM={extruder_first_layer_temp[1]|float + 5}
{% endif %}
{% endif %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% if idex_mode == '' %}
_LED_PRINTING
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
_LED_PRINTING
{% else %}
{% if both_toolheads %}
_LED_PRINTING TOOLHEAD={initial_tool}
{% if toolchange_standby_temp > -1 %}
_LED_TOOLHEAD_STANDBY TOOLHEAD={0 if initial_tool == 1 else 1}
{% else %}
_LED_PRINTING TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% else %}
_LED_PRINTING TOOLHEAD={initial_tool}
_LED_DEACTIVATE_TOOLHEAD TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_EXTRUDER { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_AFTER_HEATING_EXTRUDER X0={X0} X1={X1} Y0={Y0} Y1={Y1} INITIAL_TOOLHEAD={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if idex_mode != '' %}
{% if not both_toolheads %}
{% if initial_tool != default_toolhead %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=standby VALUE=False
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=standby VALUE=False
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if toolchange_standby_temp > -1 %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if initial_tool == 1 else 'extruder1'} TARGET={toolchange_standby_temp}
SET_GCODE_VARIABLE MACRO=T{0 if initial_tool == 1 else 1} VARIABLE=standby VALUE=True
{% endif %}
{% endif %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if printer["dual_carriage"] is defined %}
_SET_IDEX_MODE_OFFSET
{% endif %}
{% if idex_mode != '' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% if idex_mode == "copy" and idex_mode != act_idex_mode %}
_IDEX_COPY DANCE=0
{% elif idex_mode == "mirror" and idex_mode != act_idex_mode %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
RATOS_ECHO MSG="Adjusting object x-offset by {(object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={object_xoffset} MOVE=0
{% endif %}
{% else %}
_SELECT_TOOL T={initial_tool} TOOLSHIFT=false
_SET_TOOLHEAD_OFFSET
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
_SET_EXTRUSION_MODE
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
SET_GCODE_VARIABLE MACRO=_SELECT_TOOL VARIABLE=last_timestamp VALUE={printer["print_stats"].print_duration}
{% endif %}
_USER_END_START_PRINT { rawparams }
G92 E0
_CHAMBER_FILTER_ON AT="after_print_start"
_ALERT_NON_ZERO_Z_OFFSET
RATOS_ECHO MSG="Printing..."
[gcode_macro _START_PRINT_BEFORE_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% set act_t = 1 if idex_mode == 'primary' else 0 %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set is_stowable_probe = true if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' else false %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Pre-heating extruder..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={min_temp}
{% else %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET={min_temp}
{% endif %}
{% else %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
{% endif %}
{% endif %}
{% if not is_stowable_probe %}
{% if printer["dual_carriage"] is defined and act_t != default_toolhead %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
{% endif %}
RATOS_ECHO MSG="Heat soaking z probe..."
_MOVE_TO_SAFE_Z_HOME
G0 Z2 F{z_speed}
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Waiting for extruder to be preheated..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
{% if default_toolhead == 0 %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_Z_HOP
{% endif %}
{% if auto_z_offset_calibration %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
PARK_TOOLHEAD
_CLEANING_MOVE TOOLHEAD={default_toolhead} AUTOMATED=True
_SELECT_TOOL T={0 if default_toolhead == 1 else 1} X={parking_position_t0 if default_toolhead == 1 else parking_position_t1} Y=0 TOOLSHIFT=false
_CLEANING_MOVE TOOLHEAD={0 if default_toolhead == 1 else 1} AUTOMATED=True
_VAOC_CALIBRATE_Z_OFFSET AUTO_Z_OFFSET=True
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=false
{% endif %}
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
{% if needs_rehoming %}
G28 Z
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% endif %}
{% endif %}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
PROBE PROBE_METHOD=contact SAMPLES=1
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% set fuzzy_radius = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_radius|default(0)|float if beacon_contact_start_print_true_zero_fuzzy_position else 0 %}
{% set contact_true_zero_temp_has_been_set = False %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
{% if printer.beacon.last_probe_result|lower == "ok" %}
{% set last_z_offset = printer.beacon.last_z_result %}
RATOS_ECHO MSG="Auto calibration nozzle wipe with probe result {last_z_offset}..."
G0 Z{(0.2 + last_z_offset)} F{z_speed}
G0 X70 F300
{% else %}
RATOS_ECHO MSG="Skipping auto calibration nozzle wipe because probing failed!"
{% endif %}
{% elif beacon_contact_wipe_before_true_zero_method == "probe_clean" %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% set contact_true_zero_temp_has_been_set = True %}
BEACON_PROBE_CLEAN X=50 Y=10
{% else %}
CONSOLE_ECHO TYPE="error" TITLE="Unknown wipe method" MSG="Unknown wipe method '{beacon_contact_wipe_before_true_zero_method}' configured, skipping wipe before beacon true zero."
{% endif %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME FUZZY_RADIUS={fuzzy_radius}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION
{% if not contact_true_zero_temp_has_been_set %}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% endif %}
RATOS_ECHO MSG="Beacon contact auto calibration..."
{% if beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
G0 Z5 F{z_speed}
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION]
gcode =
{% set pos = printer.ratos.last_move_to_safe_z_home_position %}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE={pos[0]}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE={pos[1]}
[gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set first_x = printer["gcode_macro START_PRINT"].first_x|default(-1)|float %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set center_x = printable_x_max / 2.0 %}
{% set center_y = printable_y_max / 2.0 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% if printer["dual_carriage"] is defined %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% endif %}
{% set X0 = params.X0|default(-1)|int %}
{% set X1 = params.X1|default(-1)|int %}
{% set Y0 = params.Y0|default(-1)|int %}
{% set Y1 = params.Y1|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% if idex_mode == '' %}
_PRIME
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
RATOS_ECHO PREFIX="IDEX" MSG="using combined prime offset for IDEX {idex_mode} mode"
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
{% if both_toolheads %}
{% if initial_toolhead == 0 %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T{initial_toolhead}"
_SELECT_TOOL T={initial_toolhead} TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% endif %}
{% endif %}
CACHE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
SET_MACRO_TRAVEL_SETTINGS
{% if (X0 > -1 and Y1 > -1) or (first_x > 0 and first_y > 0) %}
{% if printer["dual_carriage"] is defined %}
{% set acceleration = printer["gcode_macro RatOS"].toolchange_travel_accel %}
{% set max_accel = printer.toolhead.max_accel|float %}
{% set square_corner_velocity = printer.toolhead.square_corner_velocity|float %}
SET_VELOCITY_LIMIT ACCEL={acceleration} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY=20
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
{% set first_z = 1 %}
{% else %}
{% set first_z = 3 %}
{% endif %}
{% if idex_mode == "mirror" %}
{% if first_y >= 0 %}
G0 Y{first_y} F{speed}
{% else %}
G0 Y{Y1} F{speed}
{% endif %}
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
_MOVE_TO_LOADING_POSITION TOOLHEAD={initial_toolhead} AUTOMATED=True
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead} AUTOMATED=True
{% endif %}
{% if first_x >= 0 and first_y >= 0 %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% else %}
{% set first_x = X0 %}
{% set first_y = Y0 %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %}
{% set first_x = X0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %}
{% set first_x = X1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|float <= center_x %}
{% set first_x = X0 %}
{% else %}
{% set first_x = X1 %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %}
{% set first_y = Y0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %}
{% set first_y = Y1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float <= center_y %}
{% set first_y = Y0 %}
{% else %}
{% set first_y = Y1 %}
{% endif %}
{% endif %}
{% endif %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% endif %}
{% endif %}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
_LOAD_RATOS_SKEW_PROFILE
[gcode_macro _PRIME]
gcode =
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
PRIME_BLOB INITIAL_TOOLHEAD={params.INITIAL_TOOLHEAD} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={params.IDEX_MODE} Y1={params.Y1}
{% else %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE == "copy" %}
_IDEX_COPY DANCE=0
{% elif params.IDEX_MODE == "mirror" %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro END_PRINT]
description = End print procedure, use this in your Slicer.
gcode =
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SAVE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = printer["gcode_macro START_PRINT"].object_xoffset|default(0)|float %}
RATOS_ECHO MSG="Adjusting object x-offset by {(0-object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={(0-object_xoffset)}
{% endif %}
{% endif %}
_USER_END_PRINT_BEFORE_HEATERS_OFF { rawparams }
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_USER_END_PRINT_AFTER_HEATERS_OFF { rawparams }
_END_PRINT_AFTER_HEATERS_OFF
_USER_END_PRINT_PARK { rawparams }
_END_PRINT_PARK
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
{% if printer["dual_carriage"] is not defined and printer["gcode_macro RatOS"].end_print_motors_off|lower != 'false' %}
M84
{% endif %}
M107
BED_MESH_CLEAR
RATOS_ECHO MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
M84
{% endif %}
RESET_NAMED_OFFSET EVENT="end_print"
RESTORE_TOOLHEAD_SETTINGS KEY="start_print"
_CHAMBER_FILTER_ON AT="print_end"
_CHAMBER_FILTER_OFF
_CHAMBER_HEATER_OFF
_USER_END_PRINT_FINISHED { rawparams }
[gcode_macro _END_PRINT_BEFORE_HEATERS_OFF]
gcode =
RATOS_ECHO MSG="Cleaning up..."
[gcode_macro _END_PRINT_AFTER_HEATERS_OFF]
gcode =
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %}
{% set r = printer["gcode_macro RatOS"].end_print_retract_filament|default(4)|float %}
{% if current_z < (max_z - z_hop) %}
{% set z_safe = z_hop %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
G91
{% if can_extrude %}
G1 E-2 F3600
{% endif %}
G0 Z{z_safe} F3600
{% if can_extrude %}
G1 E-{(r-2)} F3600
{% endif %}
G90
[gcode_macro _SET_EXTRUSION_MODE]
gcode =
{% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %}
M83
{% else %}
M82
{% endif %}
[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 =
CACHE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set axis = params.AXIS|default('')|lower %}
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
{% if axis != '' %}
{% if axis == 'x' %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
{% elif axis == 'y' %}
MAYBE_HOME
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% else %}
{action_raise_error("Unknown axis specified. Expected X or Y.")}
{% endif %}
{% else %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% endif %}
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Shaper graph"
[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_macro MEASURE_COREXY_BELT_TENSION]
description = Generates resonance graph used to ensure belts are equally tensioned.
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
MAYBE_HOME
TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_belt_tension_graph
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Belt Tension Graph"
[gcode_shell_command generate_belt_tension_graph]
command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh
timeout = 90.
verbose = True
[idle_timeout]
gcode =
{% if printer.webhooks.state|lower == 'ready' %}
{% if printer.pause_resume.is_paused|lower == 'false' %}
_USER_BEFORE_IDLE_TIMEOUT
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
_USER_AFTER_IDLE_TIMEOUT
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[named_offsets]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[bed_mesh]
split_delta_z = 0.01
speed = 300
horizontal_move_z = 10
mesh_min = 20,30
mesh_max = 310,310
fade_start = 0.6
fade_end = 10.0
probe_count = 5,5
algorithm = bicubic
log_points = False
[fastconfig]
[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.103
control = pid
pid_kp = 42.817
pid_ki = 1.353
pid_kd = 338.788
[fan]
pin = !PA8
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PB4
fan_speed = 1
heater = extruder
shutdown_speed = 1
[controller_fan controller_fan]
pin = PD12
[printer]
kinematics = corexy
max_velocity = 300
max_accel = 3000
max_z_velocity = 20
max_z_accel = 350
square_corner_velocity = 5
minimum_cruise_ratio = 0.5
[gcode_macro QUAD_GANTRY_LEVEL]
rename_existing = QUAD_GANTRY_LEVEL_ORIG
gcode =
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
QUAD_GANTRY_LEVEL_ORIG
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 330
position_endstop = 330
step_pin = PF13
dir_pin = !x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PA2
position_min = 0
[stepper_y]
position_max = 350
position_endstop = 350
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
position_min = 0
[stepper_z]
position_max = 310
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
position_min = -5
homing_speed = 10
gear_ratio = 80:16
endstop_pin = probe:z_virtual_endstop
[quad_gantry_level]
gantry_corners =
-60,-10
410,420
points =
50,25
50,275
300,275
300,25
speed = 300
horizontal_move_z = 10
retries = 5
retry_tolerance = 0.0075
max_adjust = 10
[gcode_macro G32]
gcode =
SAVE_GCODE_STATE NAME=STATE_G32
G90
G28
QUAD_GANTRY_LEVEL
G28
G0 X175 Y175 Z30 F3600
RESTORE_GCODE_STATE NAME=STATE_G32
[extruder]
rotation_distance = 8
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB0
sensor_type = Generic 3950
sensor_pin = toolboard_t0:PA1
min_extrude_temp = 170
min_temp = 0
max_temp = 285
pressure_advance = 0.03
step_pin = toolboard_t0:PD3
dir_pin = !toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PB6
microsteps = 64
full_steps_per_rotation = 200
control = pid
pid_kp = 22.176
pid_ki = 2.843
pid_kd = 43.244
[firmware_retraction]
retract_speed = 40
unretract_extra_length = 0
unretract_speed = 40
retract_length = 0.5
[resonance_tester]
accel_chip_x = beacon
accel_chip_y = beacon
probe_points =
175,175,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 0.8
sense_resistor = 0.11
[stepper_z1]
step_pin = PE2
dir_pin = !z1_dir_pin
enable_pin = !PD4
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 0.8
sense_resistor = 0.11
[stepper_z2]
step_pin = PE6
dir_pin = !z2_dir_pin
enable_pin = !PE0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z3]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 0.8
sense_resistor = 0.11
[stepper_z3]
step_pin = PF9
dir_pin = !z3_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PB3
run_current = 0.707
driver_tbl = 0
driver_toff = 4
driver_hend = 6
driver_hstrt = 7
sense_resistor = 0.11
[beacon]
serial = /dev/beacon
x_offset = 0
y_offset = 22.5
mesh_main_direction = x
mesh_runs = 1
mesh_cluster_size = 0
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[beacon_user_z_offset]
[beacon_mesh]
[beacon_true_zero_correction]
[beacon_adaptive_heat_soak]
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
ENSURE_CRITICAL_RATOS_INIT
_BEACON_MESH_INIT
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_applied_offset
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=beacon_saved_runtime_offset
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_contact_expansion_multiplier is no longer used, please remove it from your config file."
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_scan_compensation_resolution is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_scan_compensation_resolution is no longer used, please remove it from your config file."
{% endif %}
[gcode_macro BEACON_RATOS_CALIBRATION]
gcode =
RATOS_ECHO MSG="Did you mean BEACON_RATOS_CALIBRATE?"
[gcode_macro BEACON_RATOS_CALIBRATE]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
BEACON_INITIAL_CALIBRATION _AUTOMATED=True
{% if beacon_contact_start_print_true_zero %}
BEACON_POKE_TEST _AUTOMATED=True
_BEACON_CHECK_POKE
{% if printer["dual_carriage"] is not defined %}
BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET _AUTOMATED=True
{% endif %}
{% endif %}
{% set already_heated = False %}
{% if beacon_contact_start_print_true_zero and beacon_scan_compensation_enable %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% set already_heated = True %}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True _AUTOMATED_ALREADY_HEATED={already_heated} BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if beacon_contact_start_print_true_zero %}
{% if printer["dual_carriage"] is not defined %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
_BEACON_ECHO_POKE
{% endif %}
RATOS_ECHO MSG="Beacon calibration finished!"
_LED_BEACON_CALIBRATION_END
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
[gcode_macro BEACON_INITIAL_CALIBRATION]
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
_Z_HOP
RATOS_ECHO MSG="Initial beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro BEACON_FINAL_CALIBRATION]
description = Runs BEACON_AUTO_CALIBRATE after heating the bed and chamber to specified temperatures. This creates a beacon model under reference conditions for future use.
This macro will skip calibration if both the beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero settings are enabled, because a new
model will be calibrated automatically at the start of each print. Use FORCE=True to override this check.
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set already_heated = true if params._AUTOMATED_ALREADY_HEATED|default(false)|lower == 'true' else false %}
{% set force = params.FORCE|default('false')|lower in ('1', 'true', 'yes') %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default('false')|lower == "true" %}
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero and not force %}
RATOS_ECHO MSG="BEACON_FINAL_CALIBRATION skipped, not needed because beacon_contact_calibrate_model_on_true_zero is enabled. Use FORCE=True to override."
{% else %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not already_heated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
{% if not already_heated %}
G0 Z2.5 F{z_hop_speed}
RATOS_ECHO MSG="Waiting for calibration temperature..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,3600]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% endif %}
_Z_HOP
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
_Z_HOP
RATOS_ECHO MSG="Final beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro BEACON_POKE_TEST]
variable_poke_result_1 = -1
variable_poke_result_2 = -1
variable_poke_result_3 = -1
variable_poke_result_4 = -1
variable_poke_result_5 = -1
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_1 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_2 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_3 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_4 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_5 VALUE=-1
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
G0 Z5 F{z_hop_speed}
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=1
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=2
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=3
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=4
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=5
_Z_HOP
RATOS_ECHO MSG="Beacon poke test finished!"
{% if not automated %}
_BEACON_ECHO_POKE
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_POKE]
gcode =
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
BEACON_POKE speed=3 top=5 bottom={poke_bottom}
BEACON_QUERY
[gcode_macro _BEACON_STORE_POKE]
gcode =
{% set i = params.I|default(1)|int %}
{% set last_z = printer.beacon.last_poke_result|default(0)|float %}
{% if printer.beacon.last_poke_result|lower != "none" %}
{% if printer.beacon.last_poke_result.error == 0 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE={"poke_result_%s" % i} VALUE={printer.beacon.last_poke_result.latency}
{% endif %}
{% endif %}
[gcode_macro _BEACON_CHECK_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% if p1 == -1 or p2 == -1 or p3 == -1 or p4 == -1 or p5 == -1 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test error!") }
{% endif %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg > 6 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test failed!") }
{% endif %}
[gcode_macro _BEACON_ECHO_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg <= 1 %}
{% set type = "success" %}
{% set note = "Extremely low noise, rarely achieved" %}
{% elif avg > 1 and avg <= 4 %}
{% set type = "info" %}
{% set note = "Excellent performance for a typical printer" %}
{% elif avg > 4 and avg <= 8 %}
{% set type = "warning" %}
{% set note = "Acceptable performance, machine may have considerable cyclic axis noise" %}
{% elif avg > 8 and avg <= 11 %}
{% set type = "alert" %}
{% set note = "Not ideal, may want to verify proper mounting or use thinner stackups" %}
{% elif avg > 11 %}
{% set type = "alert" %}
{% set note = "Reason for concern, present setup may be risky to continue with" %}
{% endif %}
CONSOLE_ECHO TITLE="Beacon poke test result:" TYPE={type} MSG={'"Average latency: %.2f_N_%s"' % (avg, note)}
[gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET]
variable_reference_z = 0.0
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Nozzle temperature offset calibration..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET=0
{% if not automated %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set svv = printer.save_variables.variables %}
RATOS_ECHO PREFIX="BEACON" MSG="Waiting for nozzle to reach {temp}°C..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={temp} MAXIMUM={temp + 2}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
RATOS_ECHO PREFIX="BEACON" MSG="Probing with nozzle temperature {temp}°C..."
PROBE PROBE_METHOD=contact PROBE_SPEED=3 LIFT_SPEED=15 SAMPLES=5 SAMPLE_RETRACT_DIST=3 SAMPLES_TOLERANCE=0.005 SAMPLES_TOLERANCE_RETRIES=10 SAMPLES_RESULT=median
BEACON_QUERY
G0 Z5 F{z_speed}
[gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% set last_z = printer.beacon.last_z_result|default(0)|float %}
{% if temp == 150 %}
SET_GCODE_VARIABLE MACRO=BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET"].reference_z|default(0)|float %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_t{default_toolhead} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS]
gcode =
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
CONSOLE_ECHO TYPE="info" MSG={'"T0 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t0}
{% else %}
CONSOLE_ECHO TYPE="info" MSG={'"T1 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t1}
{% endif %}
[gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET]
description = "Set the thermal expansion z offset for the active toolhead based on the current extruder target temperature and thermal expansion coefficient."
gcode =
{% if params.RESET is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The RESET parameter is no longer supported and has no effect."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% if params.TOOLHEAD is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The TOOLHEAD parameter is no longer supported and has no effect. The macro now automatically determines the current toolhead."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% set beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_expansion_compensation %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set toolhead = default_toolhead %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if current_idex_mode=='primary' else default_toolhead %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_t0 = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if printer["dual_carriage"] is defined %}
{% set nozzle_expansion_coefficient_t1 = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_delta = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = temp_delta * (expansion_coefficient / 100) %}
SET_NAMED_OFFSET NAME=hotend_thermal_expansion Z={expansion_offset} MOVE=1 MOVE_SPEED={z_speed}
RATOS_ECHO PREFIX="BEACON" MSG={'"Nozzle expansion offset of %.6fmm applied to T%s"' % (expansion_offset, toolhead)}
DEBUG_ECHO PREFIX="_BEACON_SET_NOZZLE_TEMP_OFFSET" MSG="toolhead: {toolhead}, coefficient: {expansion_coefficient|round(6)}, temp_delta: {temp_delta|round(1)}, expansion_offset: {expansion_offset|round(6)}"
{% endif %}
[gcode_macro BEACON_MEASURE_BEACON_OFFSET]
variable_needs_compensation = False
variable_reference_z = 0.0
variable_front = 0.0
variable_front_left = 0.0
variable_front_right = 0.0
variable_back = 0.0
variable_back_left = 0.0
variable_back_right = 0.0
variable_right = 0.0
variable_left = 0.0
variable_margin_x = 40
variable_margin_y = 40
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure beacon offset..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_BEACON_OFFSET
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_STORE_BEACON_OFFSET]
gcode =
{% set location = params.LOCATION|lower %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_BEACON_OFFSET]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].left|default(0)|float * 1000 %}
{% set line_1 = "Front left: %.6fμm" % (front_left) %}
{% set line_2 = "Front center: %.6fμm" % (front) %}
{% set line_3 = "Front right: %.6fμm" % (front_right) %}
{% set line_4 = "Left center: %.6fμm" % (left) %}
{% set line_5 = "Right center: %.6fμm" % (right) %}
{% set line_6 = "Back left: %.6fμm" % (back_left) %}
{% set line_7 = "Back center: %.6fμm" % (back) %}
{% set line_8 = "Back right: %.6fμm" % (back_right) %}
{% set max_value = [(front_left|abs), (front|abs), (front_right|abs), (left|abs), (right|abs), (back_left|abs), (back|abs), (back_right|abs)]|max %}
{% if max_value <= 50 %}
{% set type = "success" %}
{% set recommendation = "Very low beacon offset: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low beacon offset: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High beacon offset: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High beacon offset: %.6fμm._N_You will encounter first layer problems on large prints unless you activate beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high beacon offset: %.6fμm._N_You have significant scan/contact inconsistency which is indicative of mechanical problems, please investigate before resorting to software compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Beacon offset relative to the center" TYPE={type} MSG={'"_N_%s_N__N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s"' % (recommendation, line_1, line_2, line_3, line_4, line_5, line_6, line_7, line_8)}
[gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set profile = params.PROFILE|default("auto")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set keep_temp_meshes = params.KEEP_TEMP_MESHES|default(0) %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' %}
{% set desired_spacing = printer["gcode_macro RatOS"].beacon_scan_compensation_desired_spacing|float %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
RATOS_ECHO MSG="Please wait..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,9000]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if not (beacon_adaptive_heat_soak or bed_heat_soak_time > 0) %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if printer.z_tilt is defined %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% endif %}
{% if printer.quad_gantry_level is defined %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% endif %}
_BEACON_CREATE_SCAN_COMPENSATION_MESH_CORE PROFILE="{profile}" DESIRED_SPACING={desired_spacing} CHAMBER_TEMP={chamber_temp} KEEP_TEMP_MESHES={keep_temp_meshes}
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if automated %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
RATOS_ECHO MSG="Beacon scan compensation mesh created!"
{% if not automated %}
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
{% endif %}
{% endif %}
[gcode_macro _BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED" MSG="beacon_scan_compensation_profile {beacon_scan_compensation_profile}, beacon_scan_compensation_enable {beacon_scan_compensation_enable}"
{% if beacon_scan_compensation_enable %}
BEACON_APPLY_SCAN_COMPENSATION PROFILE="{beacon_scan_compensation_profile}"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL]
gcode =
{% set beacon_contact_start_print_true_zero = params.BEACON_CONTACT_START_PRINT_TRUE_ZERO|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = params.beacon_contact_calibrate_model_on_true_zero|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and not printer.beacon.model %}
{% set beacon_model_required_for_true_zero = beacon_contact_start_print_true_zero and not beacon_contact_calibrate_model_on_true_zero %}
{% set beacon_model_required_for_homing =
printer.fastconfig.settings.stepper_z.endstop_pin == 'probe:z_virtual_endstop'
and (( printer.fastconfig.settings.beacon.home_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower != 'true')
or ( printer.fastconfig.settings.beacon.default_probe_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower != 'true' )) %}
{% if beacon_model_required_for_homing or beacon_model_required_for_true_zero %}
_LED_START_PRINTING_ERROR
{ action_raise_error("An active Beacon model is required. Have you performed initial Beacon calibration?") }
{% endif %}
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set bed_temp_mismatch_is_error = true if printer["gcode_macro RatOS"].beacon_scan_compensation_bed_temp_mismatch_is_error|default(false)|lower == 'true' else false %}
{% set bed_temp = params.BED_TEMP|default(0)|float %}
{% if bed_temp == 0 %}
{% set bed_temp = printer.heater_bed.temperature %}
{% endif %}
DEBUG_ECHO PREFIX="_START_PRINT_PREFLIGHT_CHECK_BEACON" MSG="beacon_scan_compensation_profile={beacon_scan_compensation_profile}, beacon_scan_compensation_enable={beacon_scan_compensation_enable}, bed_temp={bed_temp}"
{% if beacon_scan_compensation_enable %}
_VALIDATE_COMPENSATION_MESH_PROFILE PROFILE="{beacon_scan_compensation_profile}" TITLE="Check Beacon scan compensation profile" SUBJECT="Configured compensation profile '{beacon_scan_compensation_profile}'" COMPARE_BED_TEMP={bed_temp} COMPARE_BED_TEMP_IS_ERROR={bed_temp_mismatch_is_error}
{% endif %}
[gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set needs_scan_compensation = true if printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].needs_compensation|default(false)|lower == 'true' else false %}
{% if needs_scan_compensation %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% endif %}
[gcode_macro _BEACON_HOME_AND_ABL]
gcode =
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% if needs_rehoming %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
[gcode_macro SAVE_Z_OFFSET]
description = Deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead, or in Mainsail use the SAVE button in the Z-OFFSET section.
gcode =
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default('false')|lower == 'true' %}
{% set msg = "SAVE_Z_OFFSET is deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead,_N_or in Mainsail use the SAVE button in the Z-OFFSET section."%}
{% if not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% set msg = msg + "_N_You must then use the SAVE_CONFIG command to persist the change." %}
{% endif %}
CONSOLE_ECHO TYPE="error" MSG="{msg}"
[gcode_macro _BEACON_OFFSET_COMPARE]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE SAMPLES_DROP=1 SAMPLES=3
BEACON_QUERY
[gcode_macro T0]
variable_join = 0
variable_remap = 0
variable_alert = ""
variable_filament_name = ""
variable_filament_type = ""
variable_filament_temp = 0
variable_runout_sensor = ""
variable_active = True
variable_color = "7bff33"
variable_hotend_type = "HF"
variable_has_cht_nozzle = False
variable_cooling_position_to_nozzle_distance = 40
variable_tooolhead_sensor_to_extruder_gear_distance = 15
variable_extruder_gear_to_cooling_position_distance = 30
variable_filament_loading_nozzle_offset = -5
variable_filament_grabbing_length = 5
variable_filament_grabbing_speed = 1
variable_enable_insert_detection = True
variable_enable_runout_detection = True
variable_enable_clog_detection = True
variable_unload_after_runout = True
variable_purge_after_load = 0
variable_purge_before_unload = 0
variable_extruder_load_speed = 60
variable_filament_load_speed = 10
variable_standby = False
variable_temperature_offset = 0
variable_has_oozeguard = False
variable_has_front_arm_nozzle_wiper = False
variable_toolhead_sensor_button_only_when_sensor_enabled = False
variable_toolhead_detect_clog_only_when_sensor_enabled = True
variable_resume_after_insert = False
gcode =
{% set x = params.X|default(-1.0)|float %}
{% set y = params.Y|default(-1.0)|float %}
{% set z = params.Z|default(0.0)|float %}
{% set s = params.S|default(1)|int %}
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
_SELECT_TOOL T=0 X={x} Y={y} Z={z} TOOLSHIFT={s}
{% endif %}
[save_variables]
filename = /home/pi/printer_data/config/ratos-variables.cfg
=======================
Extruder max_extrude_ratio=0.266081
mcu 'mcu': Starting serial connect
webhooks client 3978693504: New connection
webhooks client 3978693504: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c3_PA8_PC9=PA8,PC9 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_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 BUS_PINS_spi5=PF8,PF9,PF7 BUS_PINS_spi5a=PH7,PF11,PH6 BUS_PINS_spi6=PG12,PG14,PG13 CLOCK_FREQ=400000000 MCU=stm32h723xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu 'rpi': Starting connect
mcu 'rpi': got {'count': 137, 'sum': 128169, 'sumsq': 594884, '#name': 'stats', '#sent_time': 1839.997970199, '#receive_time': 1840.012156199}
Loaded MCU 'rpi' 119 commands (?-20240727_132503-fv-az659-741 / gcc: (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110 binutils: (GNU Binutils for Raspbian) 2.35.2)
MCU 'rpi' config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256
mcu 'toolboard_t0': Starting serial connect
Loaded MCU 'toolboard_t0' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'toolboard_t0' config: ADC_MAX=4095 BUS_PINS_i2c1_PA9_PA10=PA9,PA10 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c2_PB13_PB14=PB13,PB14 BUS_PINS_i2c3_PB3_PB4=PB3,PB4 BUS_PINS_i2c3_PC0_PC1=PC0,PC1 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2_PB2_PB11_PB10=PB2,PB11,PB10 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=64000000 MCU=stm32g0b1xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PF0,PF1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu_temperature 'mcu' nominal base=-274.761905 slope=1625.000000
mcu_temperature 'toolboard_t0' nominal base=-273.206997 slope=1313.265306
mcu 'beacon': Starting serial connect
Loaded MCU 'beacon' 45 commands (Beacon 2.1.0 / )
MCU 'beacon' config: ADC_MAX=4095 BEACON_ACCEL_BITS=12 BEACON_ACCEL_SCALE_16G=7.81 BEACON_ACCEL_SCALE_2G=0.98 BEACON_ACCEL_SCALE_4G=1.95 BEACON_ACCEL_SCALE_8G=3.91 BEACON_ADC_SMOOTH_COUNT=16 BEACON_HAS_ACCEL=1 BEACON_REV=H CLOCK_FREQ=32000000 MCU=beacon STATS_SUMSQ_BASE=256
Sending MCU 'mcu' printer configuration...
Configured MCU 'mcu' (1024 moves)
Sending MCU 'rpi' printer configuration...
Configured MCU 'rpi' (1024 moves)
Sending MCU 'toolboard_t0' printer configuration...
Configured MCU 'toolboard_t0' (1024 moves)
Starting heater checks for heater_bed
beacon: loaded fnorm=5097771.25 temp=19.76 amfg=0.960 from nvm
beacon: built tempco model version 1 {'amfg': 0.9600737096063234, 'tcc': -6.477678986652925e-06, 'tcfl': -0.0006437466059114605, 'tctl': 0.0019760718274445636, 'fmin': 5097771.253436804, 'fmin_temp': 19.758686065673828}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
beacon_user_z_offset: beacon_contact_start_print_true_zero is enabled, activating beacon user z-offset management. Applying configured z_offset of 0.0 mm to named offset 'user_probe_z_offset'.
Starting heater checks for extruder
Stats 1842.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3485 bytes_read=7222 bytes_retransmit=9 bytes_invalid=0 send_seq=289 receive_seq=289 retransmit_seq=2 srtt=0.000 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400014306 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=846 bytes_read=4682 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998060 adj=49983144 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1421 bytes_read=4979 bytes_retransmit=9 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000322 adj=63997677 Octopus_Pro_H723_V1.1: temp=0.0 EBB42_Gen2_v1.0: temp=0.0 raspberry_pi: temp=59.4 heater_bed: target=0 temp=0.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=360 bytes_read=1999 bytes_retransmit=0 bytes_invalid=0 send_seq=60 receive_seq=60 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32002421 adj=32001828 coil_temp=0.0 refs=0 sysload=0.31 cputime=59.751 memavail=3309648 print_time=8.278 buffer_time=0.249 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000
Initializing RatOS...
CALCULATE_PRINTABLE_AREA: Printable area calculated: X: 0,330.0 Y: 0,350.0
webhooks: registering remote method 'shutdown_machine' for connection id: 3978693504
webhooks: registering remote method 'reboot_machine' for connection id: 3978693504
webhooks: registering remote method 'pause_job_queue' for connection id: 3978693504
webhooks: registering remote method 'start_job_queue' for connection id: 3978693504
Stats 1843.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3491 bytes_read=7325 bytes_retransmit=9 bytes_invalid=0 send_seq=290 receive_seq=290 retransmit_seq=2 srtt=0.000 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015861 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=852 bytes_read=4698 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998531 adj=50005444 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1427 bytes_read=5111 bytes_retransmit=9 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000445 adj=63998551 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=366 bytes_read=2355 bytes_retransmit=0 bytes_invalid=0 send_seq=61 receive_seq=61 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32002237 adj=32001385 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.31 cputime=59.819 memavail=3306636 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
ratos: beacon probing regions updated: BeaconProbingRegions(x_offset=0.0, y_offset=22.5, printable_x_max=330.0, printable_y_max=350.0, mesh_proximity_min_coil_pos=(20.0, 30.0), mesh_proximity_max_coil_pos=(310.0, 310.0), mesh_proximity_min_toolhead_pos=(20.0, 7.5), mesh_proximity_max_toolhead_pos=(310.0, 287.5), mesh_contact_min=(20.0, 30.0), mesh_contact_max=(310.0, 287.5), logical_proximity_min_coil_pos=(20.0, 20.0), logical_proximity_max_coil_pos=(310.0, 330.0), logical_proximity_min_toolhead_pos=(20.0, -2.5), logical_proximity_max_toolhead_pos=(310.0, 307.5), logical_contact_min=(10.0, -12.5), logical_contact_max=(320.0, 317.5))
Stats 1844.4: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3497 bytes_read=7472 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016907 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=858 bytes_read=4714 bytes_retransmit=0 bytes_invalid=0 send_seq=117 receive_seq=117 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998828 adj=50004205 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1433 bytes_read=5229 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000340 adj=63998174 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=372 bytes_read=2711 bytes_retransmit=0 bytes_invalid=0 send_seq=62 receive_seq=62 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32001966 adj=32000840 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.31 cputime=59.945 memavail=3303476 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
HELLO_RATOS: version: v2.1.0-RC4-5-g9b7d2ad3, distro: RatOS v2.1.0-RC4 (bullseye)
No deferred RatOS console messages to write.
ratos: Current CPU governor(s): performance
Stats 1845.4: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3503 bytes_read=7569 bytes_retransmit=9 bytes_invalid=0 send_seq=292 receive_seq=292 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016895 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000012 bytes_write=864 bytes_read=4743 bytes_retransmit=0 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998986 adj=50002622 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1439 bytes_read=5332 bytes_retransmit=9 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000535 adj=63997539 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=3067 bytes_retransmit=0 bytes_invalid=0 send_seq=63 receive_seq=63 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000803 adj=32000204 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.31 cputime=59.989 memavail=3309188 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1846.4: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3509 bytes_read=7672 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016408 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000012 bytes_write=870 bytes_read=4759 bytes_retransmit=0 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999034 adj=50001513 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1445 bytes_read=5464 bytes_retransmit=9 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000540 adj=63997989 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=60.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=3423 bytes_retransmit=0 bytes_invalid=0 send_seq=64 receive_seq=64 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000408 adj=31997957 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.31 cputime=60.015 memavail=3309172 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1847.4: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3515 bytes_read=7804 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016146 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000012 bytes_write=876 bytes_read=4775 bytes_retransmit=0 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999117 adj=50000696 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1451 bytes_read=5567 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000450 adj=63998169 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=3779 bytes_retransmit=0 bytes_invalid=0 send_seq=65 receive_seq=65 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000252 adj=31997542 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.28 cputime=60.041 memavail=3309172 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1848.4: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3521 bytes_read=7907 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015970 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000012 bytes_write=882 bytes_read=4791 bytes_retransmit=0 bytes_invalid=0 send_seq=121 receive_seq=121 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999176 adj=50000092 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1457 bytes_read=5670 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000381 adj=63997990 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=4135 bytes_retransmit=0 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000187 adj=31997621 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.28 cputime=60.067 memavail=3308228 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1849.4: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3527 bytes_read=8010 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015876 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000012 bytes_write=888 bytes_read=4807 bytes_retransmit=0 bytes_invalid=0 send_seq=122 receive_seq=122 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999257 adj=49999591 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1463 bytes_read=5816 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000352 adj=63997850 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=4491 bytes_retransmit=0 bytes_invalid=0 send_seq=67 receive_seq=67 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000189 adj=31997875 coil_temp=21.9 refs=0 mcu_temp=24.64 supply_voltage=2.995 sysload=0.28 cputime=60.092 memavail=3308232 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1850.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3533 bytes_read=8156 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015809 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=894 bytes_read=4836 bytes_retransmit=0 bytes_invalid=0 send_seq=123 receive_seq=123 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999287 adj=49999289 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1469 bytes_read=5919 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000385 adj=63997803 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=4847 bytes_retransmit=0 bytes_invalid=0 send_seq=68 receive_seq=68 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000228 adj=31998166 coil_temp=21.9 refs=0 mcu_temp=24.64 supply_voltage=2.995 sysload=0.28 cputime=60.118 memavail=3308232 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1851.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3539 bytes_read=8259 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015969 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=900 bytes_read=4852 bytes_retransmit=0 bytes_invalid=0 send_seq=124 receive_seq=124 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999339 adj=49998920 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1475 bytes_read=6022 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997955 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=5203 bytes_retransmit=0 bytes_invalid=0 send_seq=69 receive_seq=69 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000187 adj=31998496 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.28 cputime=60.144 memavail=3308972 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1852.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3545 bytes_read=8362 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015864 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=906 bytes_read=4868 bytes_retransmit=0 bytes_invalid=0 send_seq=125 receive_seq=125 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999365 adj=49998630 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1481 bytes_read=6154 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000388 adj=63997748 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=5559 bytes_retransmit=0 bytes_invalid=0 send_seq=70 receive_seq=70 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000169 adj=31998425 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.26 cputime=60.169 memavail=3308988 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1853.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3551 bytes_read=8494 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015807 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=912 bytes_read=4884 bytes_retransmit=0 bytes_invalid=0 send_seq=126 receive_seq=126 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999396 adj=49998462 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1487 bytes_read=6257 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000373 adj=63997930 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=5915 bytes_retransmit=0 bytes_invalid=0 send_seq=71 receive_seq=71 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998513 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.26 cputime=60.194 memavail=3308736 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1854.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3557 bytes_read=8597 bytes_retransmit=9 bytes_invalid=0 send_seq=301 receive_seq=301 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015808 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=918 bytes_read=4900 bytes_retransmit=0 bytes_invalid=0 send_seq=127 receive_seq=127 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999422 adj=49998351 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1493 bytes_read=6360 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000380 adj=63997889 Octopus_Pro_H723_V1.1: temp=34.2 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=6271 bytes_retransmit=0 bytes_invalid=0 send_seq=72 receive_seq=72 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998575 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.26 cputime=60.219 memavail=3307488 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1855.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3563 bytes_read=8714 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015781 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000010 bytes_write=924 bytes_read=4929 bytes_retransmit=0 bytes_invalid=0 send_seq=128 receive_seq=128 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999427 adj=49998229 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1499 bytes_read=6506 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000377 adj=63997908 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=6627 bytes_retransmit=0 bytes_invalid=0 send_seq=73 receive_seq=73 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000143 adj=31998610 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.26 cputime=60.244 memavail=3307488 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1856.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3569 bytes_read=8841 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015828 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000010 bytes_write=930 bytes_read=4945 bytes_retransmit=0 bytes_invalid=0 send_seq=129 receive_seq=129 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999434 adj=49998072 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1505 bytes_read=6609 bytes_retransmit=9 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000366 adj=63997902 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=6983 bytes_retransmit=0 bytes_invalid=0 send_seq=74 receive_seq=74 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998686 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.26 cputime=60.270 memavail=3308228 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1857.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3575 bytes_read=8944 bytes_retransmit=9 bytes_invalid=0 send_seq=304 receive_seq=304 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015821 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000010 bytes_write=936 bytes_read=4961 bytes_retransmit=0 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999443 adj=49997923 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1511 bytes_read=6712 bytes_retransmit=9 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997802 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=7339 bytes_retransmit=0 bytes_invalid=0 send_seq=75 receive_seq=75 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000131 adj=31998688 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.24 cputime=60.296 memavail=3308244 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1858.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3581 bytes_read=9047 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015833 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000010 bytes_write=942 bytes_read=4977 bytes_retransmit=0 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999470 adj=49997856 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1517 bytes_read=6844 bytes_retransmit=9 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997783 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=7695 bytes_retransmit=0 bytes_invalid=0 send_seq=76 receive_seq=76 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000132 adj=31998708 coil_temp=21.9 refs=0 mcu_temp=24.65 supply_voltage=2.995 sysload=0.24 cputime=60.323 memavail=3307308 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1859.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3587 bytes_read=9179 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015829 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000010 bytes_write=948 bytes_read=4993 bytes_retransmit=0 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999473 adj=49997888 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1523 bytes_read=6947 bytes_retransmit=9 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000358 adj=63997772 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=8051 bytes_retransmit=0 bytes_invalid=0 send_seq=77 receive_seq=77 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000132 adj=31998745 coil_temp=21.9 refs=0 mcu_temp=24.65 supply_voltage=2.995 sysload=0.24 cputime=60.350 memavail=3307320 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1860.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3593 bytes_read=9296 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015799 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=954 bytes_read=5022 bytes_retransmit=0 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999476 adj=49997807 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1529 bytes_read=7064 bytes_retransmit=9 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997794 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=8407 bytes_retransmit=0 bytes_invalid=0 send_seq=78 receive_seq=78 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000160 adj=31998777 coil_temp=21.9 refs=0 mcu_temp=24.65 supply_voltage=2.995 sysload=0.24 cputime=60.376 memavail=3307320 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1861.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3599 bytes_read=9399 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015797 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=960 bytes_read=5038 bytes_retransmit=0 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999481 adj=49997767 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1535 bytes_read=7196 bytes_retransmit=9 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997848 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=8763 bytes_retransmit=0 bytes_invalid=0 send_seq=79 receive_seq=79 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000161 adj=31998966 coil_temp=21.9 refs=0 mcu_temp=24.65 supply_voltage=2.995 sysload=0.24 cputime=60.402 memavail=3308060 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1862.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3605 bytes_read=9531 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015797 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=966 bytes_read=5054 bytes_retransmit=0 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999486 adj=49997730 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1541 bytes_read=7299 bytes_retransmit=9 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997820 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=9119 bytes_retransmit=0 bytes_invalid=0 send_seq=80 receive_seq=80 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000171 adj=31998954 coil_temp=21.9 refs=0 mcu_temp=24.66 supply_voltage=2.995 sysload=0.22 cputime=60.428 memavail=3308076 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1863.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3611 bytes_read=9634 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015853 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=972 bytes_read=5070 bytes_retransmit=0 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999491 adj=49997704 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1547 bytes_read=7402 bytes_retransmit=9 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997810 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=9475 bytes_retransmit=0 bytes_invalid=0 send_seq=81 receive_seq=81 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000164 adj=31998997 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.22 cputime=60.453 memavail=3311508 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1864.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3617 bytes_read=9737 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015833 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=978 bytes_read=5086 bytes_retransmit=0 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999497 adj=49997645 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1553 bytes_read=7534 bytes_retransmit=9 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997762 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=9831 bytes_retransmit=0 bytes_invalid=0 send_seq=82 receive_seq=82 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000157 adj=31998904 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.22 cputime=60.479 memavail=3311516 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1865.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3623 bytes_read=9883 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015837 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=984 bytes_read=5115 bytes_retransmit=0 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999508 adj=49997662 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1559 bytes_read=7651 bytes_retransmit=9 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000367 adj=63997881 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=10187 bytes_retransmit=0 bytes_invalid=0 send_seq=83 receive_seq=83 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998871 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.22 cputime=60.505 memavail=3311516 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1866.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3629 bytes_read=9984 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015831 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=990 bytes_read=5131 bytes_retransmit=0 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999512 adj=49997697 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1565 bytes_read=7754 bytes_retransmit=9 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997856 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=504 bytes_read=10543 bytes_retransmit=0 bytes_invalid=0 send_seq=84 receive_seq=84 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998840 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.22 cputime=60.540 memavail=3311516 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1867.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3635 bytes_read=10084 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015816 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=996 bytes_read=5147 bytes_retransmit=0 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999515 adj=49997687 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1571 bytes_read=7886 bytes_retransmit=9 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000368 adj=63997869 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=510 bytes_read=10899 bytes_retransmit=0 bytes_invalid=0 send_seq=85 receive_seq=85 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998859 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.20 cputime=60.566 memavail=3311516 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1868.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3641 bytes_read=10216 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015810 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1002 bytes_read=5163 bytes_retransmit=0 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999517 adj=49997683 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1577 bytes_read=7989 bytes_retransmit=9 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000366 adj=63997871 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=516 bytes_read=11255 bytes_retransmit=0 bytes_invalid=0 send_seq=86 receive_seq=86 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998842 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.20 cputime=60.591 memavail=3308396 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1869.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3647 bytes_read=10319 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015806 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=1008 bytes_read=5179 bytes_retransmit=0 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999519 adj=49997664 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1583 bytes_read=8092 bytes_retransmit=9 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997853 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=522 bytes_read=11611 bytes_retransmit=0 bytes_invalid=0 send_seq=87 receive_seq=87 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998856 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.20 cputime=60.616 memavail=3308144 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1870.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3653 bytes_read=10436 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015792 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1014 bytes_read=5208 bytes_retransmit=0 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999520 adj=49997653 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1589 bytes_read=8238 bytes_retransmit=9 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997827 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=528 bytes_read=11967 bytes_retransmit=0 bytes_invalid=0 send_seq=88 receive_seq=88 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000145 adj=31998867 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.20 cputime=60.642 memavail=3308156 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 1871.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3659 bytes_read=10568 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015812 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1020 bytes_read=5224 bytes_retransmit=0 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999519 adj=49997643 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1595 bytes_read=8341 bytes_retransmit=9 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000358 adj=63997826 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=534 bytes_read=12323 bytes_retransmit=0 bytes_invalid=0 send_seq=89 receive_seq=89 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000145 adj=31998858 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.20 cputime=60.668 memavail=3308156 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1872.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3665 bytes_read=10671 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015818 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1026 bytes_read=5240 bytes_retransmit=0 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999522 adj=49997592 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1601 bytes_read=8444 bytes_retransmit=9 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997795 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=540 bytes_read=12679 bytes_retransmit=0 bytes_invalid=0 send_seq=90 receive_seq=90 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000147 adj=31998855 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.18 cputime=60.692 memavail=3308304 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1873.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3671 bytes_read=10774 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015815 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1032 bytes_read=5256 bytes_retransmit=0 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999527 adj=49997598 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1607 bytes_read=8576 bytes_retransmit=9 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997814 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=546 bytes_read=13035 bytes_retransmit=0 bytes_invalid=0 send_seq=91 receive_seq=91 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000156 adj=31998870 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.18 cputime=60.719 memavail=3307512 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1874.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3677 bytes_read=10906 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015814 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1038 bytes_read=5272 bytes_retransmit=0 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999529 adj=49997630 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1613 bytes_read=8679 bytes_retransmit=9 bytes_invalid=0 send_seq=184 receive_seq=184 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000364 adj=63997835 Octopus_Pro_H723_V1.1: temp=34.3 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=552 bytes_read=13391 bytes_retransmit=0 bytes_invalid=0 send_seq=92 receive_seq=92 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000155 adj=31998944 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.18 cputime=60.744 memavail=3307292 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1875.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3683 bytes_read=11023 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015816 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1044 bytes_read=5301 bytes_retransmit=0 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999530 adj=49997624 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1619 bytes_read=8796 bytes_retransmit=9 bytes_invalid=0 send_seq=185 receive_seq=185 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000360 adj=63997848 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=558 bytes_read=13747 bytes_retransmit=0 bytes_invalid=0 send_seq=93 receive_seq=93 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000153 adj=31998921 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.18 cputime=60.768 memavail=3307040 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1876.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3695 bytes_read=11142 bytes_retransmit=9 bytes_invalid=0 send_seq=324 receive_seq=324 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015821 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1050 bytes_read=5317 bytes_retransmit=0 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999531 adj=49997612 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1625 bytes_read=8928 bytes_retransmit=9 bytes_invalid=0 send_seq=186 receive_seq=186 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997815 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=570 bytes_read=14119 bytes_retransmit=0 bytes_invalid=0 send_seq=95 receive_seq=95 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000149 adj=31998895 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.18 cputime=60.794 memavail=3307784 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1877.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3701 bytes_read=11269 bytes_retransmit=9 bytes_invalid=0 send_seq=325 receive_seq=325 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015809 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1056 bytes_read=5333 bytes_retransmit=0 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999535 adj=49997605 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1631 bytes_read=9031 bytes_retransmit=9 bytes_invalid=0 send_seq=187 receive_seq=187 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000364 adj=63997823 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.3 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=576 bytes_read=14475 bytes_retransmit=0 bytes_invalid=0 send_seq=96 receive_seq=96 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998862 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.17 cputime=60.819 memavail=3307800 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1878.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3707 bytes_read=11372 bytes_retransmit=9 bytes_invalid=0 send_seq=326 receive_seq=326 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015821 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1062 bytes_read=5349 bytes_retransmit=0 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999538 adj=49997633 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1643 bytes_read=9150 bytes_retransmit=9 bytes_invalid=0 send_seq=189 receive_seq=189 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997858 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=582 bytes_read=14831 bytes_retransmit=0 bytes_invalid=0 send_seq=97 receive_seq=97 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998870 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.17 cputime=60.845 memavail=3310644 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1879.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3713 bytes_read=11475 bytes_retransmit=9 bytes_invalid=0 send_seq=327 receive_seq=327 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015819 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1068 bytes_read=5365 bytes_retransmit=0 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999543 adj=49997630 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1649 bytes_read=9282 bytes_retransmit=9 bytes_invalid=0 send_seq=190 receive_seq=190 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997849 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=588 bytes_read=15187 bytes_retransmit=0 bytes_invalid=0 send_seq=98 receive_seq=98 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998877 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.17 cputime=60.870 memavail=3310532 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1880.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3719 bytes_read=11621 bytes_retransmit=9 bytes_invalid=0 send_seq=328 receive_seq=328 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015827 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1074 bytes_read=5381 bytes_retransmit=0 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999548 adj=49997661 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1655 bytes_read=9399 bytes_retransmit=9 bytes_invalid=0 send_seq=191 receive_seq=191 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000360 adj=63997821 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=594 bytes_read=15543 bytes_retransmit=0 bytes_invalid=0 send_seq=99 receive_seq=99 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000145 adj=31998866 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.17 cputime=60.895 memavail=3310532 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1881.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3725 bytes_read=11724 bytes_retransmit=9 bytes_invalid=0 send_seq=329 receive_seq=329 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015838 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1080 bytes_read=5410 bytes_retransmit=0 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999549 adj=49997674 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1661 bytes_read=9502 bytes_retransmit=9 bytes_invalid=0 send_seq=192 receive_seq=192 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997794 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=600 bytes_read=15899 bytes_retransmit=0 bytes_invalid=0 send_seq=100 receive_seq=100 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998845 coil_temp=21.9 refs=0 mcu_temp=24.65 supply_voltage=2.995 sysload=0.17 cputime=60.920 memavail=3310532 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1882.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3731 bytes_read=11827 bytes_retransmit=9 bytes_invalid=0 send_seq=330 receive_seq=330 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015829 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1086 bytes_read=5426 bytes_retransmit=0 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999549 adj=49997639 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1667 bytes_read=9634 bytes_retransmit=9 bytes_invalid=0 send_seq=193 receive_seq=193 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997775 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=606 bytes_read=16255 bytes_retransmit=0 bytes_invalid=0 send_seq=101 receive_seq=101 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998828 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.16 cputime=60.945 memavail=3310532 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1883.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3737 bytes_read=11959 bytes_retransmit=9 bytes_invalid=0 send_seq=331 receive_seq=331 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015827 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1092 bytes_read=5442 bytes_retransmit=0 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999549 adj=49997638 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1673 bytes_read=9737 bytes_retransmit=9 bytes_invalid=0 send_seq=194 receive_seq=194 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997817 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=612 bytes_read=16611 bytes_retransmit=0 bytes_invalid=0 send_seq=102 receive_seq=102 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998834 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.16 cputime=60.972 memavail=3308420 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1884.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3743 bytes_read=12062 bytes_retransmit=9 bytes_invalid=0 send_seq=332 receive_seq=332 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015818 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1098 bytes_read=5458 bytes_retransmit=0 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999551 adj=49997621 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1679 bytes_read=9840 bytes_retransmit=9 bytes_invalid=0 send_seq=195 receive_seq=195 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997844 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=618 bytes_read=16967 bytes_retransmit=0 bytes_invalid=0 send_seq=103 receive_seq=103 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000141 adj=31998842 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.16 cputime=60.998 memavail=3308428 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1885.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3749 bytes_read=12179 bytes_retransmit=9 bytes_invalid=0 send_seq=333 receive_seq=333 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015928 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=1104 bytes_read=5474 bytes_retransmit=0 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999556 adj=49997634 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1685 bytes_read=9986 bytes_retransmit=9 bytes_invalid=0 send_seq=196 receive_seq=196 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000364 adj=63997875 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=624 bytes_read=17323 bytes_retransmit=0 bytes_invalid=0 send_seq=104 receive_seq=104 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000140 adj=31998850 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.16 cputime=61.025 memavail=3308428 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1886.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3755 bytes_read=12311 bytes_retransmit=9 bytes_invalid=0 send_seq=334 receive_seq=334 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015910 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1110 bytes_read=5503 bytes_retransmit=0 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999560 adj=49997537 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1691 bytes_read=10089 bytes_retransmit=9 bytes_invalid=0 send_seq=197 receive_seq=197 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997682 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=630 bytes_read=17679 bytes_retransmit=0 bytes_invalid=0 send_seq=105 receive_seq=105 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000139 adj=31998765 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.16 cputime=61.052 memavail=3310056 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1887.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3761 bytes_read=12414 bytes_retransmit=9 bytes_invalid=0 send_seq=335 receive_seq=335 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015912 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1116 bytes_read=5519 bytes_retransmit=0 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999561 adj=49997607 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1697 bytes_read=10192 bytes_retransmit=9 bytes_invalid=0 send_seq=198 receive_seq=198 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997742 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=636 bytes_read=18035 bytes_retransmit=0 bytes_invalid=0 send_seq=106 receive_seq=106 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000140 adj=31998798 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.14 cputime=61.078 memavail=3309940 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1888.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3767 bytes_read=12512 bytes_retransmit=9 bytes_invalid=0 send_seq=336 receive_seq=336 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015905 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1122 bytes_read=5535 bytes_retransmit=0 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999562 adj=49997606 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1703 bytes_read=10324 bytes_retransmit=9 bytes_invalid=0 send_seq=199 receive_seq=199 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000367 adj=63997758 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=642 bytes_read=18391 bytes_retransmit=0 bytes_invalid=0 send_seq=107 receive_seq=107 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000145 adj=31998822 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.14 cputime=61.104 memavail=3312136 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1889.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3773 bytes_read=12644 bytes_retransmit=9 bytes_invalid=0 send_seq=337 receive_seq=337 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015897 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1128 bytes_read=5551 bytes_retransmit=0 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999566 adj=49997617 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1709 bytes_read=10427 bytes_retransmit=9 bytes_invalid=0 send_seq=200 receive_seq=200 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000366 adj=63997821 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=648 bytes_read=18747 bytes_retransmit=0 bytes_invalid=0 send_seq=108 receive_seq=108 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998885 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.14 cputime=61.129 memavail=3312136 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1890.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3779 bytes_read=12761 bytes_retransmit=9 bytes_invalid=0 send_seq=338 receive_seq=338 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015912 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1134 bytes_read=5567 bytes_retransmit=0 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999566 adj=49997660 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1715 bytes_read=10544 bytes_retransmit=9 bytes_invalid=0 send_seq=201 receive_seq=201 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000364 adj=63997820 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=654 bytes_read=19103 bytes_retransmit=0 bytes_invalid=0 send_seq=109 receive_seq=109 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998874 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.14 cputime=61.154 memavail=3312136 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 1891.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3785 bytes_read=12864 bytes_retransmit=9 bytes_invalid=0 send_seq=339 receive_seq=339 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015897 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1140 bytes_read=5596 bytes_retransmit=0 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999565 adj=49997618 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1721 bytes_read=10676 bytes_retransmit=9 bytes_invalid=0 send_seq=202 receive_seq=202 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997780 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=660 bytes_read=19459 bytes_retransmit=0 bytes_invalid=0 send_seq=110 receive_seq=110 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998854 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.14 cputime=61.180 memavail=3312136 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1892.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3791 bytes_read=12996 bytes_retransmit=9 bytes_invalid=0 send_seq=340 receive_seq=340 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015892 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1146 bytes_read=5612 bytes_retransmit=0 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999566 adj=49997617 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1727 bytes_read=10779 bytes_retransmit=9 bytes_invalid=0 send_seq=203 receive_seq=203 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997796 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.2 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=666 bytes_read=19815 bytes_retransmit=0 bytes_invalid=0 send_seq=111 receive_seq=111 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998868 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.13 cputime=61.205 memavail=3312136 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1893.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3797 bytes_read=13099 bytes_retransmit=9 bytes_invalid=0 send_seq=341 receive_seq=341 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015887 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1152 bytes_read=5628 bytes_retransmit=0 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999569 adj=49997627 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1733 bytes_read=10882 bytes_retransmit=9 bytes_invalid=0 send_seq=204 receive_seq=204 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997821 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=672 bytes_read=20171 bytes_retransmit=0 bytes_invalid=0 send_seq=112 receive_seq=112 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000147 adj=31998869 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.13 cputime=61.230 memavail=3310988 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 1894.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3803 bytes_read=13202 bytes_retransmit=9 bytes_invalid=0 send_seq=342 receive_seq=342 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015888 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1158 bytes_read=5644 bytes_retransmit=0 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999569 adj=49997648 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1739 bytes_read=11014 bytes_retransmit=9 bytes_invalid=0 send_seq=205 receive_seq=205 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000360 adj=63997814 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=678 bytes_read=20527 bytes_retransmit=0 bytes_invalid=0 send_seq=113 receive_seq=113 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000146 adj=31998929 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.13 cputime=61.256 memavail=3311004 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1895.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3809 bytes_read=13348 bytes_retransmit=9 bytes_invalid=0 send_seq=343 receive_seq=343 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015885 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1164 bytes_read=5660 bytes_retransmit=0 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999570 adj=49997632 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1745 bytes_read=11131 bytes_retransmit=9 bytes_invalid=0 send_seq=206 receive_seq=206 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000360 adj=63997798 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=684 bytes_read=20883 bytes_retransmit=0 bytes_invalid=0 send_seq=114 receive_seq=114 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998899 coil_temp=21.9 refs=0 mcu_temp=24.67 supply_voltage=2.995 sysload=0.13 cputime=61.281 memavail=3311004 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1896.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3815 bytes_read=13451 bytes_retransmit=9 bytes_invalid=0 send_seq=344 receive_seq=344 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015889 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1170 bytes_read=5689 bytes_retransmit=0 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999570 adj=49997630 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1751 bytes_read=11234 bytes_retransmit=9 bytes_invalid=0 send_seq=207 receive_seq=207 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997800 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=690 bytes_read=21239 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000143 adj=31998882 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.13 cputime=61.307 memavail=3311004 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1897.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3821 bytes_read=13554 bytes_retransmit=9 bytes_invalid=0 send_seq=345 receive_seq=345 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015892 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1176 bytes_read=5705 bytes_retransmit=0 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999569 adj=49997616 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1757 bytes_read=11366 bytes_retransmit=9 bytes_invalid=0 send_seq=208 receive_seq=208 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000358 adj=63997793 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=696 bytes_read=21595 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000143 adj=31998889 coil_temp=21.9 refs=0 mcu_temp=24.68 supply_voltage=2.995 sysload=0.12 cputime=61.333 memavail=3311004 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1898.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3827 bytes_read=13684 bytes_retransmit=9 bytes_invalid=0 send_seq=346 receive_seq=346 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015895 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1182 bytes_read=5721 bytes_retransmit=0 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999571 adj=49997616 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1763 bytes_read=11469 bytes_retransmit=9 bytes_invalid=0 send_seq=209 receive_seq=209 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997777 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=57.5 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=702 bytes_read=21951 bytes_retransmit=0 bytes_invalid=0 send_seq=117 receive_seq=117 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998873 coil_temp=21.9 refs=0 mcu_temp=24.69 supply_voltage=2.995 sysload=0.12 cputime=61.360 memavail=3310500 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 1899.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3833 bytes_read=13782 bytes_retransmit=9 bytes_invalid=0 send_seq=347 receive_seq=347 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015889 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1194 bytes_read=5753 bytes_retransmit=0 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999578 adj=49997623 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1769 bytes_read=11572 bytes_retransmit=9 bytes_invalid=0 send_seq=210 receive_seq=210 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000360 adj=63997799 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=708 bytes_read=22307 bytes_retransmit=0 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000141 adj=31998867 coil_temp=21.9 refs=0 mcu_temp=24.69 supply_voltage=2.995 sysload=0.12 cputime=61.386 memavail=3310500 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 1900.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3839 bytes_read=13899 bytes_retransmit=9 bytes_invalid=0 send_seq=348 receive_seq=348 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015878 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1200 bytes_read=5769 bytes_retransmit=0 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999578 adj=49997703 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1775 bytes_read=11714 bytes_retransmit=9 bytes_invalid=0 send_seq=211 receive_seq=211 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997819 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=714 bytes_read=22663 bytes_retransmit=0 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000141 adj=31998865 coil_temp=21.9 refs=0 mcu_temp=24.71 supply_voltage=2.995 sysload=0.12 cputime=61.412 memavail=3310500 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 1901.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3845 bytes_read=14031 bytes_retransmit=9 bytes_invalid=0 send_seq=349 receive_seq=349 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015866 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1206 bytes_read=5798 bytes_retransmit=0 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999579 adj=49997697 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1781 bytes_read=11810 bytes_retransmit=9 bytes_invalid=0 send_seq=212 receive_seq=212 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997867 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=720 bytes_read=23019 bytes_retransmit=0 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000140 adj=31998867 coil_temp=22.0 refs=0 mcu_temp=24.71 supply_voltage=2.995 sysload=0.12 cputime=61.439 memavail=3310500 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 1902.4: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3851 bytes_read=14134 bytes_retransmit=9 bytes_invalid=0 send_seq=350 receive_seq=350 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015873 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1212 bytes_read=5814 bytes_retransmit=0 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999579 adj=49997690 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1787 bytes_read=11906 bytes_retransmit=9 bytes_invalid=0 send_seq=213 receive_seq=213 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997884 Octopus_Pro_H723_V1.1: temp=34.4 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=726 bytes_read=23375 bytes_retransmit=0 bytes_invalid=0 send_seq=121 receive_seq=121 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000140 adj=31998871 coil_temp=21.9 refs=0 mcu_temp=24.71 supply_voltage=2.995 sysload=0.11 cputime=61.465 memavail=3310500 print_time=8.278 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2385.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=8751 bytes_read=71497 bytes_retransmit=9 bytes_invalid=0 send_seq=939 receive_seq=939 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015755 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4152 bytes_read=14856 bytes_retransmit=0 bytes_invalid=0 send_seq=666 receive_seq=666 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999558 adj=49997630 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4733 bytes_read=67570 bytes_retransmit=9 bytes_invalid=0 send_seq=704 receive_seq=704 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000356 adj=63997836 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3672 bytes_read=194968 bytes_retransmit=0 bytes_invalid=0 send_seq=612 receive_seq=612 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000145 adj=31998864 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.07 cputime=73.694 memavail=3313484 print_time=552.153 buffer_time=0.868 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2386.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=9305 bytes_read=71824 bytes_retransmit=9 bytes_invalid=0 send_seq=956 receive_seq=956 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015753 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4158 bytes_read=14885 bytes_retransmit=0 bytes_invalid=0 send_seq=667 receive_seq=667 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999559 adj=49997623 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4739 bytes_read=67687 bytes_retransmit=9 bytes_invalid=0 send_seq=705 receive_seq=705 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997851 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3678 bytes_read=195324 bytes_retransmit=0 bytes_invalid=0 send_seq=613 receive_seq=613 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000145 adj=31998883 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.07 cputime=73.736 memavail=3313484 print_time=552.464 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Endstop y still triggered after retract
Endstop y still triggered after retract
Endstop y still triggered after retract
Stats 2387.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=10929 bytes_read=73144 bytes_retransmit=9 bytes_invalid=0 send_seq=1036 receive_seq=1036 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=48 upcoming_bytes=0 freq=400015744 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4164 bytes_read=14901 bytes_retransmit=0 bytes_invalid=0 send_seq=668 receive_seq=668 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999558 adj=49997639 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4745 bytes_read=67819 bytes_retransmit=9 bytes_invalid=0 send_seq=706 receive_seq=706 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997850 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3684 bytes_read=195680 bytes_retransmit=0 bytes_invalid=0 send_seq=614 receive_seq=614 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000147 adj=31998891 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.07 cputime=73.816 memavail=3303264 print_time=553.642 buffer_time=0.355 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2388.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=10988 bytes_read=73281 bytes_retransmit=9 bytes_invalid=0 send_seq=1038 receive_seq=1038 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015744 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4176 bytes_read=14933 bytes_retransmit=0 bytes_invalid=0 send_seq=670 receive_seq=670 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999557 adj=49997616 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4751 bytes_read=67922 bytes_retransmit=9 bytes_invalid=0 send_seq=707 receive_seq=707 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997863 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3690 bytes_read=196036 bytes_retransmit=0 bytes_invalid=0 send_seq=615 receive_seq=615 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000147 adj=31998937 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.07 cputime=73.844 memavail=3298884 print_time=553.642 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2389.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=10994 bytes_read=73384 bytes_retransmit=9 bytes_invalid=0 send_seq=1039 receive_seq=1039 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015741 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4182 bytes_read=14949 bytes_retransmit=0 bytes_invalid=0 send_seq=671 receive_seq=671 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999556 adj=49997597 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4757 bytes_read=68039 bytes_retransmit=9 bytes_invalid=0 send_seq=708 receive_seq=708 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997851 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3696 bytes_read=196392 bytes_retransmit=0 bytes_invalid=0 send_seq=616 receive_seq=616 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000147 adj=31998932 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.07 cputime=73.869 memavail=3298380 print_time=553.642 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2390.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11000 bytes_read=73516 bytes_retransmit=9 bytes_invalid=0 send_seq=1040 receive_seq=1040 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015740 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4188 bytes_read=14965 bytes_retransmit=0 bytes_invalid=0 send_seq=672 receive_seq=672 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999556 adj=49997596 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4763 bytes_read=68157 bytes_retransmit=9 bytes_invalid=0 send_seq=709 receive_seq=709 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997849 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3702 bytes_read=196748 bytes_retransmit=0 bytes_invalid=0 send_seq=617 receive_seq=617 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998924 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.07 cputime=73.895 memavail=3310608 print_time=553.642 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2391.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11006 bytes_read=73634 bytes_retransmit=9 bytes_invalid=0 send_seq=1041 receive_seq=1041 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015743 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4194 bytes_read=14994 bytes_retransmit=0 bytes_invalid=0 send_seq=673 receive_seq=673 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999555 adj=49997586 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4769 bytes_read=68260 bytes_retransmit=9 bytes_invalid=0 send_seq=710 receive_seq=710 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997847 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3708 bytes_read=197104 bytes_retransmit=0 bytes_invalid=0 send_seq=618 receive_seq=618 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998927 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.07 cputime=73.921 memavail=3310368 print_time=553.642 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.3 pwm=0.000
Stats 2392.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11012 bytes_read=73735 bytes_retransmit=9 bytes_invalid=0 send_seq=1042 receive_seq=1042 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015748 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4200 bytes_read=15010 bytes_retransmit=0 bytes_invalid=0 send_seq=674 receive_seq=674 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999554 adj=49997574 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4775 bytes_read=68391 bytes_retransmit=9 bytes_invalid=0 send_seq=711 receive_seq=711 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997849 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3714 bytes_read=197460 bytes_retransmit=0 bytes_invalid=0 send_seq=619 receive_seq=619 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998917 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=73.947 memavail=3309896 print_time=553.642 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 2393.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11018 bytes_read=73849 bytes_retransmit=9 bytes_invalid=0 send_seq=1043 receive_seq=1043 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015737 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4206 bytes_read=15026 bytes_retransmit=0 bytes_invalid=0 send_seq=675 receive_seq=675 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999554 adj=49997554 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4781 bytes_read=68509 bytes_retransmit=9 bytes_invalid=0 send_seq=712 receive_seq=712 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997829 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3720 bytes_read=197816 bytes_retransmit=0 bytes_invalid=0 send_seq=620 receive_seq=620 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998908 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=73.973 memavail=3308248 print_time=553.642 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2394.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11024 bytes_read=73967 bytes_retransmit=9 bytes_invalid=0 send_seq=1044 receive_seq=1044 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015736 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4212 bytes_read=15042 bytes_retransmit=0 bytes_invalid=0 send_seq=676 receive_seq=676 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999554 adj=49997579 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4787 bytes_read=68612 bytes_retransmit=9 bytes_invalid=0 send_seq=713 receive_seq=713 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997850 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3726 bytes_read=198172 bytes_retransmit=0 bytes_invalid=0 send_seq=621 receive_seq=621 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998916 coil_temp=22.0 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=73.998 memavail=3307240 print_time=553.642 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2395.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11030 bytes_read=74070 bytes_retransmit=9 bytes_invalid=0 send_seq=1045 receive_seq=1045 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015733 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4218 bytes_read=15058 bytes_retransmit=0 bytes_invalid=0 send_seq=677 receive_seq=677 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999554 adj=49997583 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4793 bytes_read=68729 bytes_retransmit=9 bytes_invalid=0 send_seq=714 receive_seq=714 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000353 adj=63997844 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3732 bytes_read=198528 bytes_retransmit=0 bytes_invalid=0 send_seq=622 receive_seq=622 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998911 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=74.024 memavail=3307240 print_time=553.642 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2396.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=11036 bytes_read=74201 bytes_retransmit=9 bytes_invalid=0 send_seq=1046 receive_seq=1046 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015731 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4224 bytes_read=15087 bytes_retransmit=0 bytes_invalid=0 send_seq=678 receive_seq=678 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999555 adj=49997592 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4799 bytes_read=68847 bytes_retransmit=9 bytes_invalid=0 send_seq=715 receive_seq=715 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000353 adj=63997845 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3738 bytes_read=198884 bytes_retransmit=0 bytes_invalid=0 send_seq=623 receive_seq=623 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000149 adj=31998927 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=74.050 memavail=3311352 print_time=553.642 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2397.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=12975 bytes_read=75988 bytes_retransmit=9 bytes_invalid=0 send_seq=1144 receive_seq=1144 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015732 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4230 bytes_read=15103 bytes_retransmit=0 bytes_invalid=0 send_seq=679 receive_seq=679 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999554 adj=49997600 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4805 bytes_read=68964 bytes_retransmit=9 bytes_invalid=0 send_seq=716 receive_seq=716 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000356 adj=63997849 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3744 bytes_read=199240 bytes_retransmit=0 bytes_invalid=0 send_seq=624 receive_seq=624 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998909 coil_temp=22.0 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=74.162 memavail=3311020 print_time=564.151 buffer_time=0.861 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2398.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=13513 bytes_read=76310 bytes_retransmit=9 bytes_invalid=0 send_seq=1160 receive_seq=1160 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015747 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4236 bytes_read=15119 bytes_retransmit=0 bytes_invalid=0 send_seq=680 receive_seq=680 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999556 adj=49997588 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4811 bytes_read=69081 bytes_retransmit=9 bytes_invalid=0 send_seq=717 receive_seq=717 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997879 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3750 bytes_read=199596 bytes_retransmit=0 bytes_invalid=0 send_seq=625 receive_seq=625 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998889 coil_temp=22.0 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=74.207 memavail=3298936 print_time=564.462 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Endstop y still triggered after retract
Endstop y still triggered after retract
Endstop y still triggered after retract
Stats 2399.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15132 bytes_read=77642 bytes_retransmit=9 bytes_invalid=0 send_seq=1239 receive_seq=1239 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=48 upcoming_bytes=0 freq=400015755 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4242 bytes_read=15135 bytes_retransmit=0 bytes_invalid=0 send_seq=681 receive_seq=681 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999559 adj=49997585 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4817 bytes_read=69199 bytes_retransmit=9 bytes_invalid=0 send_seq=718 receive_seq=718 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000356 adj=63997849 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3756 bytes_read=199952 bytes_retransmit=0 bytes_invalid=0 send_seq=626 receive_seq=626 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998896 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=74.289 memavail=3301120 print_time=565.640 buffer_time=0.349 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2400.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15191 bytes_read=77765 bytes_retransmit=9 bytes_invalid=0 send_seq=1241 receive_seq=1241 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015755 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4248 bytes_read=15151 bytes_retransmit=0 bytes_invalid=0 send_seq=682 receive_seq=682 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999559 adj=49997620 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4823 bytes_read=69302 bytes_retransmit=9 bytes_invalid=0 send_seq=719 receive_seq=719 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000356 adj=63997821 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3762 bytes_read=200308 bytes_retransmit=0 bytes_invalid=0 send_seq=627 receive_seq=627 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998888 coil_temp=22.0 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=74.315 memavail=3301124 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2401.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15197 bytes_read=77883 bytes_retransmit=9 bytes_invalid=0 send_seq=1242 receive_seq=1242 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015756 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 bytes_write=4254 bytes_read=15180 bytes_retransmit=0 bytes_invalid=0 send_seq=683 receive_seq=683 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999559 adj=49997611 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4829 bytes_read=69419 bytes_retransmit=9 bytes_invalid=0 send_seq=720 receive_seq=720 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997813 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3768 bytes_read=200664 bytes_retransmit=0 bytes_invalid=0 send_seq=628 receive_seq=628 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998889 coil_temp=22.0 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.06 cputime=74.340 memavail=3301124 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2402.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15203 bytes_read=78000 bytes_retransmit=9 bytes_invalid=0 send_seq=1243 receive_seq=1243 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015752 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 bytes_write=4260 bytes_read=15196 bytes_retransmit=0 bytes_invalid=0 send_seq=684 receive_seq=684 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999558 adj=49997599 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4835 bytes_read=69551 bytes_retransmit=9 bytes_invalid=0 send_seq=721 receive_seq=721 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000355 adj=63997810 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.2 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3774 bytes_read=201020 bytes_retransmit=0 bytes_invalid=0 send_seq=629 receive_seq=629 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000153 adj=31998886 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.05 cputime=74.366 memavail=3310772 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2403.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15209 bytes_read=78114 bytes_retransmit=9 bytes_invalid=0 send_seq=1244 receive_seq=1244 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015750 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 bytes_write=4266 bytes_read=15212 bytes_retransmit=0 bytes_invalid=0 send_seq=685 receive_seq=685 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999558 adj=49997600 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4841 bytes_read=69654 bytes_retransmit=9 bytes_invalid=0 send_seq=722 receive_seq=722 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997819 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3780 bytes_read=201376 bytes_retransmit=0 bytes_invalid=0 send_seq=630 receive_seq=630 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998942 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.05 cputime=74.391 memavail=3307712 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2404.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15215 bytes_read=78217 bytes_retransmit=9 bytes_invalid=0 send_seq=1245 receive_seq=1245 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015753 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 bytes_write=4272 bytes_read=15228 bytes_retransmit=0 bytes_invalid=0 send_seq=686 receive_seq=686 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999557 adj=49997597 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4847 bytes_read=69771 bytes_retransmit=9 bytes_invalid=0 send_seq=723 receive_seq=723 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997870 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3786 bytes_read=201732 bytes_retransmit=0 bytes_invalid=0 send_seq=631 receive_seq=631 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998922 coil_temp=22.0 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.05 cputime=74.417 memavail=3306956 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2405.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=15221 bytes_read=78334 bytes_retransmit=9 bytes_invalid=0 send_seq=1246 receive_seq=1246 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015758 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 bytes_write=4278 bytes_read=15244 bytes_retransmit=0 bytes_invalid=0 send_seq=687 receive_seq=687 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999556 adj=49997571 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4853 bytes_read=69889 bytes_retransmit=9 bytes_invalid=0 send_seq=724 receive_seq=724 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997847 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3792 bytes_read=202088 bytes_retransmit=0 bytes_invalid=0 send_seq=632 receive_seq=632 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998901 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.05 cputime=74.443 memavail=3306956 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 2406.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15227 bytes_read=78466 bytes_retransmit=9 bytes_invalid=0 send_seq=1247 receive_seq=1247 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015758 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=4284 bytes_read=15273 bytes_retransmit=0 bytes_invalid=0 send_seq=688 receive_seq=688 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999556 adj=49997549 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4859 bytes_read=69992 bytes_retransmit=9 bytes_invalid=0 send_seq=725 receive_seq=725 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997829 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3798 bytes_read=202444 bytes_retransmit=0 bytes_invalid=0 send_seq=633 receive_seq=633 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000151 adj=31998890 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.05 cputime=74.468 memavail=3306956 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2407.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15233 bytes_read=78569 bytes_retransmit=9 bytes_invalid=0 send_seq=1248 receive_seq=1248 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015756 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=4290 bytes_read=15289 bytes_retransmit=0 bytes_invalid=0 send_seq=689 receive_seq=689 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999555 adj=49997556 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4865 bytes_read=70123 bytes_retransmit=9 bytes_invalid=0 send_seq=726 receive_seq=726 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997841 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3804 bytes_read=202800 bytes_retransmit=0 bytes_invalid=0 send_seq=634 receive_seq=634 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998878 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.05 cputime=74.494 memavail=3306956 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 2408.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15239 bytes_read=78686 bytes_retransmit=9 bytes_invalid=0 send_seq=1249 receive_seq=1249 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015754 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=4296 bytes_read=15305 bytes_retransmit=0 bytes_invalid=0 send_seq=690 receive_seq=690 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999557 adj=49997565 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4871 bytes_read=70241 bytes_retransmit=9 bytes_invalid=0 send_seq=727 receive_seq=727 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997844 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3810 bytes_read=203156 bytes_retransmit=0 bytes_invalid=0 send_seq=635 receive_seq=635 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998874 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.05 cputime=74.519 memavail=3306060 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 2409.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15245 bytes_read=78804 bytes_retransmit=9 bytes_invalid=0 send_seq=1250 receive_seq=1250 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015760 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=4302 bytes_read=15321 bytes_retransmit=0 bytes_invalid=0 send_seq=691 receive_seq=691 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999558 adj=49997600 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4877 bytes_read=70344 bytes_retransmit=9 bytes_invalid=0 send_seq=728 receive_seq=728 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000356 adj=63997839 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3816 bytes_read=203512 bytes_retransmit=0 bytes_invalid=0 send_seq=636 receive_seq=636 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000151 adj=31998876 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.05 cputime=74.545 memavail=3305812 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2410.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15251 bytes_read=78907 bytes_retransmit=9 bytes_invalid=0 send_seq=1251 receive_seq=1251 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015758 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=4308 bytes_read=15337 bytes_retransmit=0 bytes_invalid=0 send_seq=692 receive_seq=692 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999559 adj=49997600 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4883 bytes_read=70461 bytes_retransmit=9 bytes_invalid=0 send_seq=729 receive_seq=729 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997819 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=60.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3822 bytes_read=203868 bytes_retransmit=0 bytes_invalid=0 send_seq=637 receive_seq=637 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000151 adj=31998893 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.05 cputime=74.571 memavail=3295844 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2411.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15257 bytes_read=79038 bytes_retransmit=9 bytes_invalid=0 send_seq=1252 receive_seq=1252 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015758 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4314 bytes_read=15366 bytes_retransmit=0 bytes_invalid=0 send_seq=693 receive_seq=693 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999560 adj=49997621 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4889 bytes_read=70579 bytes_retransmit=9 bytes_invalid=0 send_seq=730 receive_seq=730 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997837 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3828 bytes_read=204224 bytes_retransmit=0 bytes_invalid=0 send_seq=638 receive_seq=638 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998889 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.05 cputime=74.597 memavail=3294836 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 2412.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15263 bytes_read=79156 bytes_retransmit=9 bytes_invalid=0 send_seq=1253 receive_seq=1253 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015756 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4320 bytes_read=15382 bytes_retransmit=0 bytes_invalid=0 send_seq=694 receive_seq=694 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999559 adj=49997626 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4895 bytes_read=70696 bytes_retransmit=9 bytes_invalid=0 send_seq=731 receive_seq=731 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997833 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3834 bytes_read=204580 bytes_retransmit=0 bytes_invalid=0 send_seq=639 receive_seq=639 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000149 adj=31998876 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.04 cputime=74.623 memavail=3295576 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2413.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15269 bytes_read=79259 bytes_retransmit=9 bytes_invalid=0 send_seq=1254 receive_seq=1254 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015758 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4326 bytes_read=15398 bytes_retransmit=0 bytes_invalid=0 send_seq=695 receive_seq=695 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999561 adj=49997612 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4901 bytes_read=70813 bytes_retransmit=9 bytes_invalid=0 send_seq=732 receive_seq=732 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997845 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3840 bytes_read=204936 bytes_retransmit=0 bytes_invalid=0 send_seq=640 receive_seq=640 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000149 adj=31998872 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.04 cputime=74.650 memavail=3309964 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.4 pwm=0.000
Stats 2414.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15275 bytes_read=79370 bytes_retransmit=9 bytes_invalid=0 send_seq=1255 receive_seq=1255 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015759 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4332 bytes_read=15414 bytes_retransmit=0 bytes_invalid=0 send_seq=696 receive_seq=696 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999560 adj=49997618 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4907 bytes_read=70931 bytes_retransmit=9 bytes_invalid=0 send_seq=733 receive_seq=733 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997836 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3846 bytes_read=205292 bytes_retransmit=0 bytes_invalid=0 send_seq=641 receive_seq=641 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998866 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.04 cputime=74.676 memavail=3309460 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2415.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15281 bytes_read=79488 bytes_retransmit=9 bytes_invalid=0 send_seq=1256 receive_seq=1256 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015766 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4338 bytes_read=15430 bytes_retransmit=0 bytes_invalid=0 send_seq=697 receive_seq=697 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999560 adj=49997605 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4913 bytes_read=71034 bytes_retransmit=9 bytes_invalid=0 send_seq=734 receive_seq=734 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997835 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.2 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3852 bytes_read=205648 bytes_retransmit=0 bytes_invalid=0 send_seq=642 receive_seq=642 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998859 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.04 cputime=74.703 memavail=3309208 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 2416.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15287 bytes_read=79605 bytes_retransmit=9 bytes_invalid=0 send_seq=1257 receive_seq=1257 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015765 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4344 bytes_read=15459 bytes_retransmit=0 bytes_invalid=0 send_seq=698 receive_seq=698 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999559 adj=49997577 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4919 bytes_read=71151 bytes_retransmit=9 bytes_invalid=0 send_seq=735 receive_seq=735 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000358 adj=63997807 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3858 bytes_read=206004 bytes_retransmit=0 bytes_invalid=0 send_seq=643 receive_seq=643 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000149 adj=31998856 coil_temp=22.0 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.04 cputime=74.730 memavail=3308956 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2417.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15293 bytes_read=79722 bytes_retransmit=9 bytes_invalid=0 send_seq=1258 receive_seq=1258 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015795 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4350 bytes_read=15475 bytes_retransmit=0 bytes_invalid=0 send_seq=699 receive_seq=699 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999558 adj=49997568 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4925 bytes_read=71283 bytes_retransmit=9 bytes_invalid=0 send_seq=736 receive_seq=736 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000358 adj=63997832 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3864 bytes_read=206360 bytes_retransmit=0 bytes_invalid=0 send_seq=644 receive_seq=644 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998875 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.04 cputime=74.756 memavail=3308956 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2418.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15299 bytes_read=79840 bytes_retransmit=9 bytes_invalid=0 send_seq=1259 receive_seq=1259 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015793 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4356 bytes_read=15491 bytes_retransmit=0 bytes_invalid=0 send_seq=700 receive_seq=700 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999557 adj=49997502 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4931 bytes_read=71386 bytes_retransmit=9 bytes_invalid=0 send_seq=737 receive_seq=737 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997757 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3870 bytes_read=206716 bytes_retransmit=0 bytes_invalid=0 send_seq=645 receive_seq=645 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998888 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.04 cputime=74.782 memavail=3308528 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2419.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15305 bytes_read=79943 bytes_retransmit=9 bytes_invalid=0 send_seq=1260 receive_seq=1260 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015792 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4362 bytes_read=15507 bytes_retransmit=0 bytes_invalid=0 send_seq=701 receive_seq=701 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999556 adj=49997509 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4937 bytes_read=71503 bytes_retransmit=9 bytes_invalid=0 send_seq=738 receive_seq=738 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997779 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3876 bytes_read=207072 bytes_retransmit=0 bytes_invalid=0 send_seq=646 receive_seq=646 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000151 adj=31998900 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.04 cputime=74.807 memavail=3308528 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2420.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15311 bytes_read=80075 bytes_retransmit=9 bytes_invalid=0 send_seq=1261 receive_seq=1261 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015786 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4368 bytes_read=15523 bytes_retransmit=0 bytes_invalid=0 send_seq=702 receive_seq=702 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999556 adj=49997526 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4943 bytes_read=71621 bytes_retransmit=9 bytes_invalid=0 send_seq=739 receive_seq=739 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997789 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3882 bytes_read=207428 bytes_retransmit=0 bytes_invalid=0 send_seq=647 receive_seq=647 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998882 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.04 cputime=74.832 memavail=3308528 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2421.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15317 bytes_read=80192 bytes_retransmit=9 bytes_invalid=0 send_seq=1262 receive_seq=1262 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015785 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4374 bytes_read=15539 bytes_retransmit=0 bytes_invalid=0 send_seq=703 receive_seq=703 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999561 adj=49997542 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4949 bytes_read=71724 bytes_retransmit=9 bytes_invalid=0 send_seq=740 receive_seq=740 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997810 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3888 bytes_read=207784 bytes_retransmit=0 bytes_invalid=0 send_seq=648 receive_seq=648 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000151 adj=31998880 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.04 cputime=74.858 memavail=3308528 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2422.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15323 bytes_read=80295 bytes_retransmit=9 bytes_invalid=0 send_seq=1263 receive_seq=1263 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015780 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4380 bytes_read=15568 bytes_retransmit=0 bytes_invalid=0 send_seq=704 receive_seq=704 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999567 adj=49997642 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4955 bytes_read=71855 bytes_retransmit=9 bytes_invalid=0 send_seq=741 receive_seq=741 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997820 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3894 bytes_read=208140 bytes_retransmit=0 bytes_invalid=0 send_seq=649 receive_seq=649 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998889 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.04 cputime=74.884 memavail=3308528 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2423.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15329 bytes_read=80427 bytes_retransmit=9 bytes_invalid=0 send_seq=1264 receive_seq=1264 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015776 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4386 bytes_read=15584 bytes_retransmit=0 bytes_invalid=0 send_seq=705 receive_seq=705 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999567 adj=49997730 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4961 bytes_read=71973 bytes_retransmit=9 bytes_invalid=0 send_seq=742 receive_seq=742 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997833 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3900 bytes_read=208496 bytes_retransmit=0 bytes_invalid=0 send_seq=650 receive_seq=650 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998917 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.04 cputime=74.910 memavail=3311472 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2424.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15335 bytes_read=80528 bytes_retransmit=9 bytes_invalid=0 send_seq=1265 receive_seq=1265 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015775 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4392 bytes_read=15600 bytes_retransmit=0 bytes_invalid=0 send_seq=706 receive_seq=706 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999567 adj=49997698 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4967 bytes_read=72076 bytes_retransmit=9 bytes_invalid=0 send_seq=743 receive_seq=743 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997853 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3906 bytes_read=208852 bytes_retransmit=0 bytes_invalid=0 send_seq=651 receive_seq=651 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000151 adj=31998912 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.04 cputime=74.936 memavail=3310232 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2425.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15341 bytes_read=80629 bytes_retransmit=9 bytes_invalid=0 send_seq=1266 receive_seq=1266 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015774 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4398 bytes_read=15616 bytes_retransmit=0 bytes_invalid=0 send_seq=707 receive_seq=707 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999572 adj=49997670 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4973 bytes_read=72193 bytes_retransmit=9 bytes_invalid=0 send_seq=744 receive_seq=744 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997850 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3912 bytes_read=209208 bytes_retransmit=0 bytes_invalid=0 send_seq=652 receive_seq=652 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000151 adj=31998894 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.04 cputime=74.961 memavail=3310232 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2426.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15347 bytes_read=80775 bytes_retransmit=9 bytes_invalid=0 send_seq=1267 receive_seq=1267 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015771 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4404 bytes_read=15632 bytes_retransmit=0 bytes_invalid=0 send_seq=708 receive_seq=708 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999572 adj=49997737 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4979 bytes_read=72311 bytes_retransmit=9 bytes_invalid=0 send_seq=745 receive_seq=745 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997842 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3918 bytes_read=209564 bytes_retransmit=0 bytes_invalid=0 send_seq=653 receive_seq=653 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000150 adj=31998890 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.04 cputime=74.988 memavail=3310232 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2427.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15359 bytes_read=80894 bytes_retransmit=9 bytes_invalid=0 send_seq=1269 receive_seq=1269 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015767 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=4410 bytes_read=15661 bytes_retransmit=0 bytes_invalid=0 send_seq=709 receive_seq=709 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999570 adj=49997705 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4985 bytes_read=72428 bytes_retransmit=9 bytes_invalid=0 send_seq=746 receive_seq=746 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000356 adj=63997843 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3930 bytes_read=209936 bytes_retransmit=0 bytes_invalid=0 send_seq=655 receive_seq=655 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000149 adj=31998882 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.014 memavail=3310236 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2428.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15365 bytes_read=80997 bytes_retransmit=9 bytes_invalid=0 send_seq=1270 receive_seq=1270 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015764 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=4416 bytes_read=15677 bytes_retransmit=0 bytes_invalid=0 send_seq=710 receive_seq=710 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999569 adj=49997667 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4991 bytes_read=72545 bytes_retransmit=9 bytes_invalid=0 send_seq=747 receive_seq=747 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000356 adj=63997845 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3936 bytes_read=210292 bytes_retransmit=0 bytes_invalid=0 send_seq=656 receive_seq=656 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998868 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.041 memavail=3307860 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2429.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15371 bytes_read=81129 bytes_retransmit=9 bytes_invalid=0 send_seq=1271 receive_seq=1271 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015762 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=4422 bytes_read=15693 bytes_retransmit=0 bytes_invalid=0 send_seq=711 receive_seq=711 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999568 adj=49997636 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4997 bytes_read=72663 bytes_retransmit=9 bytes_invalid=0 send_seq=748 receive_seq=748 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997842 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3942 bytes_read=210648 bytes_retransmit=0 bytes_invalid=0 send_seq=657 receive_seq=657 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000148 adj=31998872 coil_temp=21.9 refs=0 mcu_temp=24.60 supply_voltage=2.995 sysload=0.03 cputime=75.067 memavail=3307860 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2430.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15390 bytes_read=81237 bytes_retransmit=9 bytes_invalid=0 send_seq=1273 receive_seq=1273 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015761 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=4428 bytes_read=15709 bytes_retransmit=0 bytes_invalid=0 send_seq=712 receive_seq=712 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999567 adj=49997610 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5003 bytes_read=72766 bytes_retransmit=9 bytes_invalid=0 send_seq=749 receive_seq=749 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997870 Octopus_Pro_H723_V1.1: temp=34.5 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3948 bytes_read=211004 bytes_retransmit=0 bytes_invalid=0 send_seq=658 receive_seq=658 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000147 adj=31998867 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.093 memavail=3307860 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2431.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15396 bytes_read=81354 bytes_retransmit=9 bytes_invalid=0 send_seq=1274 receive_seq=1274 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015762 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=4434 bytes_read=15725 bytes_retransmit=0 bytes_invalid=0 send_seq=713 receive_seq=713 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999565 adj=49997590 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5009 bytes_read=72883 bytes_retransmit=9 bytes_invalid=0 send_seq=750 receive_seq=750 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997865 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3954 bytes_read=211360 bytes_retransmit=0 bytes_invalid=0 send_seq=659 receive_seq=659 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000147 adj=31998867 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.119 memavail=3309488 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2432.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15402 bytes_read=81486 bytes_retransmit=9 bytes_invalid=0 send_seq=1275 receive_seq=1275 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015760 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4440 bytes_read=15754 bytes_retransmit=0 bytes_invalid=0 send_seq=714 receive_seq=714 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999564 adj=49997563 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5015 bytes_read=73015 bytes_retransmit=9 bytes_invalid=0 send_seq=751 receive_seq=751 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997856 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3960 bytes_read=211716 bytes_retransmit=0 bytes_invalid=0 send_seq=660 receive_seq=660 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000146 adj=31998866 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.144 memavail=3309632 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2433.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15408 bytes_read=81589 bytes_retransmit=9 bytes_invalid=0 send_seq=1276 receive_seq=1276 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015771 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4446 bytes_read=15770 bytes_retransmit=0 bytes_invalid=0 send_seq=715 receive_seq=715 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999563 adj=49997562 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5027 bytes_read=73134 bytes_retransmit=9 bytes_invalid=0 send_seq=753 receive_seq=753 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997845 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3966 bytes_read=212072 bytes_retransmit=0 bytes_invalid=0 send_seq=661 receive_seq=661 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000147 adj=31998862 coil_temp=22.0 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.170 memavail=3312692 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2434.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15414 bytes_read=81692 bytes_retransmit=9 bytes_invalid=0 send_seq=1277 receive_seq=1277 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015769 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4452 bytes_read=15786 bytes_retransmit=0 bytes_invalid=0 send_seq=716 receive_seq=716 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999563 adj=49997533 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5033 bytes_read=73251 bytes_retransmit=9 bytes_invalid=0 send_seq=754 receive_seq=754 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997819 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3972 bytes_read=212428 bytes_retransmit=0 bytes_invalid=0 send_seq=662 receive_seq=662 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000145 adj=31998870 coil_temp=22.0 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.195 memavail=3311220 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2435.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15420 bytes_read=81819 bytes_retransmit=9 bytes_invalid=0 send_seq=1278 receive_seq=1278 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015767 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4458 bytes_read=15802 bytes_retransmit=0 bytes_invalid=0 send_seq=717 receive_seq=717 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999563 adj=49997551 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5039 bytes_read=73369 bytes_retransmit=9 bytes_invalid=0 send_seq=755 receive_seq=755 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997823 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3978 bytes_read=212784 bytes_retransmit=0 bytes_invalid=0 send_seq=663 receive_seq=663 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000145 adj=31998840 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.223 memavail=3308568 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2436.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15426 bytes_read=81936 bytes_retransmit=9 bytes_invalid=0 send_seq=1279 receive_seq=1279 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015768 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=4464 bytes_read=15817 bytes_retransmit=0 bytes_invalid=0 send_seq=718 receive_seq=718 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999562 adj=49997557 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5045 bytes_read=73472 bytes_retransmit=9 bytes_invalid=0 send_seq=756 receive_seq=756 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000358 adj=63997829 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3984 bytes_read=213140 bytes_retransmit=0 bytes_invalid=0 send_seq=664 receive_seq=664 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998847 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.249 memavail=3309460 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2437.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15432 bytes_read=82039 bytes_retransmit=9 bytes_invalid=0 send_seq=1280 receive_seq=1280 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015765 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4470 bytes_read=15845 bytes_retransmit=0 bytes_invalid=0 send_seq=719 receive_seq=719 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999560 adj=49997548 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=5051 bytes_read=73597 bytes_retransmit=9 bytes_invalid=0 send_seq=757 receive_seq=757 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000357 adj=63997842 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3990 bytes_read=213496 bytes_retransmit=0 bytes_invalid=0 send_seq=665 receive_seq=665 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998851 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.03 cputime=75.275 memavail=3309460 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2438.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15438 bytes_read=82171 bytes_retransmit=9 bytes_invalid=0 send_seq=1281 receive_seq=1281 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015765 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4476 bytes_read=15860 bytes_retransmit=0 bytes_invalid=0 send_seq=720 receive_seq=720 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999561 adj=49997546 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=5057 bytes_read=73707 bytes_retransmit=9 bytes_invalid=0 send_seq=758 receive_seq=758 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000361 adj=63997842 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3996 bytes_read=213852 bytes_retransmit=0 bytes_invalid=0 send_seq=666 receive_seq=666 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998856 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.03 cputime=75.301 memavail=3308960 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2439.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15444 bytes_read=82274 bytes_retransmit=9 bytes_invalid=0 send_seq=1282 receive_seq=1282 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015764 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4482 bytes_read=15875 bytes_retransmit=0 bytes_invalid=0 send_seq=721 receive_seq=721 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999563 adj=49997558 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=5063 bytes_read=73803 bytes_retransmit=9 bytes_invalid=0 send_seq=759 receive_seq=759 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000360 adj=63997902 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4002 bytes_read=214208 bytes_retransmit=0 bytes_invalid=0 send_seq=667 receive_seq=667 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998860 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.03 cputime=75.326 memavail=3308960 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2440.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15450 bytes_read=82377 bytes_retransmit=9 bytes_invalid=0 send_seq=1283 receive_seq=1283 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015758 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4488 bytes_read=15890 bytes_retransmit=0 bytes_invalid=0 send_seq=722 receive_seq=722 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999563 adj=49997615 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=5069 bytes_read=73912 bytes_retransmit=9 bytes_invalid=0 send_seq=760 receive_seq=760 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000360 adj=63997878 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=57.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4008 bytes_read=214564 bytes_retransmit=0 bytes_invalid=0 send_seq=668 receive_seq=668 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998873 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.03 cputime=75.350 memavail=3308960 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2441.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15456 bytes_read=82523 bytes_retransmit=9 bytes_invalid=0 send_seq=1284 receive_seq=1284 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015767 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=4494 bytes_read=15906 bytes_retransmit=0 bytes_invalid=0 send_seq=723 receive_seq=723 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999563 adj=49997609 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=5075 bytes_read=74027 bytes_retransmit=9 bytes_invalid=0 send_seq=761 receive_seq=761 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997880 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4014 bytes_read=214920 bytes_retransmit=0 bytes_invalid=0 send_seq=669 receive_seq=669 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998879 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.03 cputime=75.375 memavail=3309700 print_time=565.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2442.6: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=15462 bytes_read=82626 bytes_retransmit=9 bytes_invalid=0 send_seq=1285 receive_seq=1285 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015771 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=4500 bytes_read=15935 bytes_retransmit=0 bytes_invalid=0 send_seq=724 receive_seq=724 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999563 adj=49997592 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5081 bytes_read=74144 bytes_retransmit=9 bytes_invalid=0 send_seq=762 receive_seq=762 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997836 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4020 bytes_read=215276 bytes_retransmit=0 bytes_invalid=0 send_seq=670 receive_seq=670 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000144 adj=31998865 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.02 cputime=75.402 memavail=3309720 print_time=608.687 buffer_time=0.382 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Attempting MCU 'mcu' reset command
Attempting MCU 'rpi' config_reset command
b'Got EOF when reading from device'
Attempting MCU 'toolboard_t0' reset command
Attempting MCU 'beacon' reset command
webhooks client 3978693504: Disconnected
Restarting printer
Start printer at Mon Feb 16 02:09:34 2026 (1771207774.5 2444.2)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-pro-h723-11]
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=PG13,
z1_step_pin=PE2,
z1_dir_pin=PE3,
z1_enable_pin=PD4,
z1_uart_pin=PE1,
z1_diag_pin=PG14,
z2_step_pin=PE6,
z2_dir_pin=PA14,
z2_enable_pin=PE0,
z2_uart_pin=PD3,
z2_diag_pin=PG15,
z3_step_pin=PF9,
z3_dir_pin=PF10,
z3_enable_pin=PG2,
z3_uart_pin=PF2,
z3_diag_pin=PG12,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
e_power_draw_pin=null,
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,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PG15,
filament_sensor_motion_pin=PG14,
ratrig_vaoc_probe_pin=PG10,
ratrig_vaoc_led_pin=PB0,
ratrig_vaoc_fan_pin=PD13,
chamber_lighting_pin=PB11,
chamber_filter_4p_fan_pin=PD14,
chamber_filter_4p_fan_enable_pin=PD15
[mcu]
serial = /dev/RatOS/btt-octopus-pro-h723-11
[temperature_sensor Octopus_Pro_H723_V1.1]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_software_mosi_pin = PB5
spi_software_miso_pin = PB4
spi_software_sclk_pin = PB3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD3,
e_dir_pin=PD2,
e_enable_pin=PB6,
e_uart_pin=PB3,
e_heater_pin=PB0,
e_sensor_pin=PA1,
e_power_draw_pin=null,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB1,
bltouch_sensor_pin=PA5,
bltouch_control_pin=PA4,
probe_pin=PA5,
fan_part_cooling_pin=PB8,
fan_toolhead_cooling_pin=PB4,
fan_controller_board_pin=null,
heater_bed_heating_pin=null,
heater_bed_sensor_pin=null,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PA3,
filament_sensor_motion_pin=PA9,
ratrig_vaoc_probe_pin=null,
ratrig_vaoc_led_pin=null,
ratrig_vaoc_fan_pin=null,
chamber_lighting_pin=null,
chamber_filter_4p_fan_pin=null,
chamber_filter_4p_fan_enable_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-gen2-10-t0
[temperature_sensor EBB42_Gen2_v1.0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[lis2dw toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB1
spi_software_mosi_pin = toolboard_t0:PB11
spi_software_miso_pin = toolboard_t0:PB2
spi_software_sclk_pin = toolboard_t0:PB10
[gcode_macro RatOS]
variable_homing = "endstops"
variable_z_probe = "static"
variable_sensorless_x_current = 0.6
variable_sensorless_y_current = 0.9
variable_safe_home_x = "middle"
variable_safe_home_y = "middle"
variable_driver_type_x = "tmc2209"
variable_driver_type_y = "tmc2209"
variable_stowable_probe_stop_on_error = False
variable_chamber_filter_enable = True
variable_chamber_filter_speed = 0.5
variable_chamber_filter_disable_speed = 1.0
variable_chamber_filter_enable_at = "after_print_start"
variable_chamber_filter_disable_period = 300
variable_chamber_filter_disable_bed_temp = 0
variable_chamber_heater_enable = True
variable_chamber_heater_bed_temp = 115
variable_chamber_heater_preheating_temp = 150
variable_chamber_heater_heating_temp_offset = 25
variable_chamber_heater_control_external_heater = False
variable_chamber_heater_air_circulation_enable = True
variable_chamber_heater_air_circulation_fan_speed = 0.35
variable_chamber_heater_air_circulation_y_pos = 0
variable_chamber_heater_air_circulation_z_pos = 100
variable_chamber_heater_extra_fan_speed = 1.0
variable_chamber_heater_filter_fan_speed = 1.0
variable_led_status_action = 0.0,1.0,1.0
variable_led_status_success = 0.0,1.0,0.0
variable_led_status_error = 1.0,0.0,1.0
variable_led_status_on = 1.0,1.0,1.0
variable_led_status_off = 0.0,0.0,1.0
variable_led_status_standby = 0.1,0.1,0.1
variable_led_status_heating = 1.0,0.0,0.0
variable_led_status_cooling = 0.0,0.0,1.0
variable_calibrate_bed_mesh = True
variable_adaptive_mesh = True
variable_start_print_park_in = "front"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "front"
variable_end_print_park_z_hop = 20
variable_nozzle_priming = "primeblob"
variable_nozzle_prime_start_x = "max"
variable_nozzle_prime_start_y = "min"
variable_nozzle_prime_direction = "auto"
variable_nozzle_prime_bridge_fan = 102
variable_probe_for_priming_result = None
variable_probe_for_priming_end_result = None
variable_probe_for_priming_result_t1 = None
variable_probe_for_priming_end_result_t1 = None
variable_probe_for_priming_disable_mesh_constraints = False
variable_adaptive_prime_offset_threshold = -1.0
variable_last_z_offset = None
variable_runout_park_in = "front"
variable_enable_unload_tip_forming = False
variable_filament_unload_length = 150
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 = True
variable_preheat_extruder_temp = 150
variable_macro_travel_speed = 300
variable_macro_travel_accel = 3000
variable_macro_z_speed = 15
variable_bed_margin_x = [0, 0]
variable_bed_margin_y = [0, 0]
variable_printable_x_min = 0
variable_printable_x_max = 0
variable_printable_y_min = 0
variable_printable_y_max = 0
variable_end_print_motors_off = True
variable_status_color_ok = "00FF00"
variable_status_color_error = "FF0000"
variable_status_color_unknown = "FFFF00"
variable_end_print_retract_filament = 10
gcode =
ECHO_RATOS_VARS
variable_beacon_bed_mesh_scv = 25
variable_beacon_contact_z_homing = False
variable_beacon_contact_start_print_true_zero = True
variable_beacon_contact_start_print_true_zero_fuzzy_position = True
variable_beacon_contact_calibrate_model_on_true_zero = True
variable_beacon_contact_wipe_before_true_zero = True
variable_beacon_contact_wipe_before_true_zero_method = "probe_clean"
variable_beacon_contact_true_zero_temp = 170
variable_beacon_contact_prime_probing = True
variable_beacon_contact_expansion_compensation = True
variable_beacon_contact_bed_mesh = False
variable_beacon_contact_bed_mesh_samples = 2
variable_beacon_contact_z_tilt_adjust = False
variable_beacon_contact_z_tilt_adjust_samples = 2
variable_beacon_scan_compensation_enable = True
variable_beacon_scan_compensation_profile = "auto"
variable_beacon_scan_compensation_desired_spacing = 10
variable_beacon_scan_compensation_bed_temp_mismatch_is_error = False
variable_beacon_contact_poke_bottom_limit = -1
variable_beacon_scan_method_automatic = False
variable_beacon_adaptive_heat_soak_max_wait = 5400
variable_beacon_adaptive_heat_soak_extra_wait_after_completion = 0
variable_beacon_adaptive_heat_soak_layer_quality = 3
variable_beacon_adaptive_heat_soak_maximum_first_layer_duration = 1800
variable_beacon_contact_start_print_true_zero_fuzzy_radius = 20
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209"]
variable_y_axes = ["y"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2", "z3"]
[ratos_homing]
axes = xyz
z_hop = 15
z_hop_speed = 15
gcode =
_LED_ON
{% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set target_idex_mode = printer["dual_carriage"].carriage_1|lower %}
_IDEX_SINGLE
_SELECT_TOOL T={default_toolhead} TOOLSHIFT=false
{% endif %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True
M400
G90
{% set X = true if params.X is defined else false %}
{% set Y = true if params.Y is defined else false %}
{% set Z = true if params.Z is defined else false %}
{% if printer["gcode_macro RatOS"].home_y_first|default(false)|lower == 'true' %}
HOME_Y X={X} Y={Y} Z={Z}
HOME_X X={X} Y={Y} Z={Z}
{% else %}
HOME_X X={X} Y={Y} Z={Z}
HOME_Y X={X} Y={Y} Z={Z}
{% endif %}
HOME_Z X={X} Y={Y} Z={Z}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR
{% endif %}
{% endif %}
[gcode_macro HOME_X]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %}
{% set homing_x = homing_x if homing_x else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_X" MSG="printable_x_max: {printable_x_max}, safe_home_x: {safe_home_x}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}"
{% if X or not Y and not Z %}
{% if homing_x == 'endstop' %}
G28 X
{% elif homing_x == 'sensorless' %}
{% if printer["dual_carriage"] is defined %}
{ action_emergency_stop("sensorless homing not supported on IDEX!") }
{% endif %}
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 %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % (0 if default_toolhead==1 else 1)].parking_position|float %}
SET_DUAL_CARRIAGE CARRIAGE={0 if default_toolhead==1 else 1} MODE=PRIMARY
G1 X{parking_position} F{speed}
SET_DUAL_CARRIAGE CARRIAGE={default_toolhead} MODE=PRIMARY
{% endif %}
{% set x_homed = True %}
G0 X{safe_home_x} F{speed}
M400
{% endif %}
[gcode_macro HOME_Y]
gcode =
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %}
{% set homing_y = homing_y if homing_y else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Y" MSG="printable_y_max: {printable_y_max}, safe_home_y: {safe_home_y}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}"
{% if Y or not X and not Z %}
{% if homing_y == 'endstop' %}
G28 Y
{% elif homing_y == '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 %}
[gcode_macro HOME_Z]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% set beacon_contact_z_homing = true if printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_z_home_position_fuzzing_radius = printer["gcode_macro RatOS"].beacon_z_home_position_fuzzing_radius|default(0)|float %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Z" MSG="x_homed: {x_homed}, y_homed: {y_homed}, z_probe: {z_probe}, beacon_contact_z_homing: {beacon_contact_z_homing}"
{% if Z or not Y and not X %}
RATOS_ECHO MSG="Homing Z"
{% if x_homed == False or y_homed == False %}
{ action_emergency_stop("X and Y must be homed before homing Z") }
{% else %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_z_homing %}
{% if beacon_contact_start_print_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro HOME_X_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
G4 P300
G28 X
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
[gcode_macro HOME_Y_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
G4 P300
G28 Y
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
[gcode_macro _Z_HOP]
description = Move Z axis up by Z_HOP distance at Z_HOP_SPEED. In relative mode it will move Z axis up by Z_HOP distance. In absolute mode it will move Z axis to Z_HOP distance.
gcode =
{% set z_hop = printer.fastconfig.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro __MOVE_TO_SAFE_Z_HOME_ECHO_DEBUG]
gcode =
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="x: {params.X}, y: {params.Y}, z_hop: {params.Z_HOP}, fuzzy_radius: {params.FUZZY_RADIUS}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}, printable_x_max: {printer['gcode_macro RatOS'].printable_x_max}, printable_y_max: {printer['gcode_macro RatOS'].printable_y_max}"
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis. Specify ABL=1 to also ensure that automatic bed levelling is applied (if configured).
variable_is_kinematic_position_overriden = False
gcode =
{% set abl = params.ABL|default('')|lower in ('true', 'yes', '1') %}
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
RATOS_ECHO 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 %}
RATOS_ECHO MSG="Homing {axesToHome}"
G28 {axesToHome}
{% else %}
RATOS_ECHO MSG="All requested axes already homed. Skipping homing."
{% endif %}
{% endif %}
{% if abl %}
{% if printer.z_tilt is defined %}
{% if not printer.z_tilt.applied %}
RATOS_ECHO MSG="Performing Z tilt adjustment..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% else %}
RATOS_ECHO MSG="Z tilt already applied. Skipping Z tilt adjustment."
{% endif %}
{% elif printer.quad_gantry_level is defined %}
{% if not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Performing quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% else %}
RATOS_ECHO MSG="Quad gantry leveling already applied. Skipping quad gantry leveling."
{% endif %}
{% else %}
RATOS_ECHO MSG="No automatic bed leveling method configured. Skipping bed leveling."
{% endif %}
{% endif %}
[gcode_macro PID_CALIBRATE_HOTEND]
description = Perform a PID calibration test for a given extruder heater.
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set temp = params.TEMP|default(220)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_HOTEND" MSG="TEMP={temp}"
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO MSG="PID calibration hotend heater T0 at {temp}°C..."
PID_CALIBRATE HEATER=extruder TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
{% if toolhead==0 or toolhead==1 %}
RATOS_ECHO MSG="PID calibration hotend heater T{toolhead} at {temp}°C..."
PID_CALIBRATE HEATER=extruder{'' if toolhead==0 else toolhead} TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_BED]
description = Perform a PID calibration test for the bed heater.
gcode =
{% set temp = params.TEMP|default(80)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_BED" MSG="TEMP={temp}"
RATOS_ECHO MSG="PID calibration bed heater at {temp}°C..."
PID_CALIBRATE HEATER=heater_bed TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_CHAMBER_HEATER]
description = Perform a PID calibration test for the chamber heater.
gcode =
{% set temp = params.TEMP|default(150)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_CHAMBER_HEATER" MSG="TEMP={temp}"
{% if printer["heater_generic chamber_heater"] is defined %}
RATOS_ECHO MSG="PID calibration chamber heater at {temp}°C..."
PID_CALIBRATE HEATER=chamber_heater TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_heater" %}
{% set link_text = "RatOS Chamber Heater" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber heater found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro INITIALIZE_PA_TUNING]
description = Start a pressure advance tuning tower.
gcode =
{% set start = params.START|default(0.0)|float %}
{% set factor = params.FACTOR|default(0.001)|float %}
{% set layer_number = printer["gcode_macro _ON_LAYER_CHANGE"].layer_number|default(0)|int %}
{% set is_printing_gcode = true if printer["gcode_macro START_PRINT"].is_printing_gcode|default(true)|lower == 'true' else false %}
{% if is_printing_gcode and layer_number < 2 %}
DEBUG_ECHO PREFIX="START_PA_TOWER" MSG="START: {start}, FACTOR: {factor}"
RATOS_ECHO MSG="Starting pressure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% else %}
RATOS_ECHO MSG="Pressure advance tuning tower requires you to be printing gcode and on layer 1 to start."
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro CHAMBER_FILTER_ON]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro CHAMBER_FILTER_OFF]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Deactivating chamber filter..."
_CHAMBER_FILTER_TURN_OFF
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro _CHAMBER_FILTER_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set chamber_filter_enable_at = printer["gcode_macro RatOS"].chamber_filter_enable_at|default('after_print_start')|lower %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_ON" MSG="at: {at}, chamber_filter_enable: {chamber_filter_enable}, chamber_filter_enable_at: {chamber_filter_enable_at}, chamber_filter_speed: {chamber_filter_speed}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if chamber_filter_enable_at == at %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON AT={at}
{% if chamber_filter_enable_at == "print_end" %}
_LED_CHAMBER_FILTER_ON
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_FILTER_OFF]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF" MSG="chamber_filter_enable: {chamber_filter_enable}, filter_disable_period: {filter_disable_period}, filter_disable_bed_temp: {filter_disable_bed_temp}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_period > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting {filter_disable_period} seconds before turning chamber filter off..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION={filter_disable_period}
{% endif %}
{% if filter_disable_bed_temp > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting for bed temp to cool down to {filter_disable_bed_temp}°C to turn filter off..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=0 MAXIMUM={filter_disable_bed_temp}
_CHAMBER_FILTER_TURN_OFF
_LED_CHAMBER_FILTER_OFF
{% endif %}
{% endif %}
[delayed_gcode _CHAMBER_FILTER_OFF_TIMER]
gcode =
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF_TIMER" MSG="executed"
_CHAMBER_FILTER_TURN_OFF
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Chamber filter turned off!"
_LED_CHAMBER_FILTER_OFF
[gcode_macro _CHAMBER_FILTER_TURN_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_speed|default(0)|float %}
{% if at == "print_end" %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_disable_speed|default(0)|float %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION=0
SET_FAN_SPEED FAN=filter SPEED={chamber_filter_speed}
[gcode_macro _CHAMBER_FILTER_TURN_OFF]
gcode =
SET_FAN_SPEED FAN=filter SPEED=0
[gcode_macro _CHAMBER_FILTER_SANITY_CHECK]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_bed_temp > 0 and filter_disable_period > 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable, not both.")}
{% endif %}
{% if filter_disable_bed_temp == 0 and filter_disable_period == 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable.")}
{% endif %}
{% endif %}
[gcode_macro CHAMBER_HEATER_ON]
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(45)|int %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp} IS_FROM_START_PRINT=False
[gcode_macro CHAMBER_HEATER_OFF]
gcode =
_CHAMBER_HEATER_OFF
[gcode_macro _CHAMBER_HEATER_ON]
variable_chamber_temp = 0
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set is_from_start_print = true if params.IS_FROM_START_PRINT|default(True)|lower == 'true' else false %}
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set chamber_heater_enable = true if printer["gcode_macro RatOS"].chamber_heater_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
{% set chamber_heater_preheating_temp = printer["gcode_macro RatOS"].chamber_heater_preheating_temp|default(150)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set chamber_heater_control_external_heater = true if printer["gcode_macro RatOS"].chamber_heater_control_external_heater|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_enable = true if printer["gcode_macro RatOS"].chamber_heater_air_circulation_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_fan_speed = printer["gcode_macro RatOS"].chamber_heater_air_circulation_fan_speed|default(0.35)|float %}
{% set chamber_heater_air_circulation_y_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_y_pos|default(0)|float %}
{% set chamber_heater_air_circulation_z_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_z_pos|default(100)|float %}
DEBUG_ECHO PREFIX="_CHAMBER_HEATER_ON" MSG="chamber_heater_enable: {chamber_heater_enable}, chamber_heater_preheating_temp: {chamber_heater_preheating_temp}, chamber_heater_heating_temp_offset: {chamber_heater_heating_temp_offset}, bed_temp: {bed_temp}, chamber_temp: {chamber_temp}, start_chamber_temp: {start_chamber_temp}"
{% if chamber_heater_enable and chamber_temp > 0 and chamber_heater_bed_temp > 0 %}
_LED_HEATING
RATOS_ECHO MSG="Preheating chamber to {(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}°C..."
{% set chamber_temp_sensor = "extruder" %}
{% if printer["dual_carriage"] is defined and default_toolhead == 1 %}
{% set chamber_temp_sensor = "extruder1" %}
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% set chamber_temp_sensor = "temperature_sensor chamber" %}
{% endif %}
{% set current_chamber_temp = printer['%s' % chamber_temp_sensor].temperature|int %}
{% set needs_heating = current_chamber_temp < (start_chamber_temp if start_chamber_temp > 0 else chamber_temp) %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_BEFORE_PREHEATING
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
{% if not is_from_start_print %}
MAYBE_HOME
{% endif %}
G0 Z{chamber_heater_air_circulation_z_pos} F{z_speed}
G0 Y{chamber_heater_air_circulation_y_pos} F{speed}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 1 else 0}
{% else %}
M106 S{(255 * chamber_heater_air_circulation_fan_speed)}
{% endif %}
{% else %}
{% if is_from_start_print %}
G0 Z{z} F{z_speed}
{% endif %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE={chamber_temp}
{% if needs_heating %}
M140 S{chamber_heater_bed_temp}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={chamber_heater_preheating_temp}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if needs_heating %}
_CHAMBER_HEATER_EXTRA_FAN_ON
{% endif %}
{% if needs_heating %}
TEMPERATURE_WAIT SENSOR="{chamber_temp_sensor}" MINIMUM={(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% endif %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED=0
_CHAMBER_FILTER_ON AT="before_print_start"
{% endif %}
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
G28 Z
{% endif %}
{% endif %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_AFTER_PREHEATING
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% if printer["heater_generic chamber_heater"] is defined %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined and chamber_heater_control_external_heater %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
_LED_SUCCESS
{% endif %}
[gcode_macro _CHAMBER_HEATER_OFF]
gcode =
RATOS_ECHO MSG="Deactivating chamber heater..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=0
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE=0
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
_CHAMBER_HEATER_EXTRA_FAN_OFF
[delayed_gcode _CHAMBER_HEATER_CONTROL]
initial_duration = 0.
gcode =
{% set chamber_temp = printer["gcode_macro _CHAMBER_HEATER_ON"].chamber_temp|default(0)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set current_chamber_temp = printer['temperature_sensor chamber'].temperature|int %}
{% if current_chamber_temp < chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if current_chamber_temp >= chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON]
gcode =
{% set chamber_heater_extra_fan_speed = printer["gcode_macro RatOS"].chamber_heater_extra_fan_speed|default(0.0)|float %}
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
{% if chamber_heater_extra_fan_speed > 0 %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED={chamber_heater_extra_fan_speed}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF]
gcode =
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED=0
{% endif %}
[gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING]
description = Will be executed before chamber preheating, only if heating is needed.
gcode =
[gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING]
description = Will be executed after chamber preheating, only if heating was needed.
gcode =
[gcode_macro _LED_START_PRINTING]
gcode =
_LED_ACTION
[gcode_macro _LED_START_PRINTING_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_PRINTING]
gcode =
_LED_ON TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_PAUSE]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_ON]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_OFF]
gcode =
_LED_STANDBY
[gcode_macro _LED_LOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_LOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_RUNOUT]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_CLOG]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_UNLOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_UNLOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_DEACTIVATE_TOOLHEAD]
gcode =
_LED_OFF TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_STANDBY]
gcode =
_LED_STANDBY TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_WAKEUP]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_MOTORS_OFF]
gcode =
_LED_STANDBY
_LED_VAOC_OFF
[gcode_macro _LED_INPUT_SHAPER_START]
gcode =
_LED_ACTION
[gcode_macro _LED_INPUT_SHAPER_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_START]
gcode =
_LED_ACTION
[gcode_macro _LED_BEACON_CALIBRATION_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_VAOC_ON]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=1.0 GREEN=1.0 BLUE=1.0
{% endif %}
[gcode_macro _LED_VAOC_OFF]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=0.0 GREEN=0.0 BLUE=0.0
{% endif %}
[gcode_macro _LED_ACTION]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_action %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SUCCESS]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_success %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_HEATING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_heating %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_COOLING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_cooling %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ERROR]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_error %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ON]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_on %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_OFF]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_off %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_STANDBY]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_standby %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
{% if toolhead >= 0 %}
{% if printer['neopixel nozzle_led_t%s' % toolhead] is defined %}
SET_LED LED={'nozzle_led_t%s' % toolhead} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% else %}
{% if printer['neopixel nozzle_led_t0'] is defined %}
SET_LED LED={'nozzle_led_t0'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% if printer['neopixel nozzle_led_t1'] is defined %}
SET_LED LED={'nozzle_led_t1'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% endif %}
_USER_LED_SET { rawparams }
[gcode_macro _USER_LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% if filament_name == '' or filament_type == '' %}
{% set filament_name = 'unknown' %}
{% set filament_type = 'unknown' %}
{% endif %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_LOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_LOAD_FILAMENT]
description = Load filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_LOAD_FILAMENT" MSG="TEMP={temp}"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=load_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
_LOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
RESTORE_GCODE_STATE NAME=load_state
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament load routine complete, please check that the filament was loaded correctly."
[gcode_macro _IDEX_LOAD_FILAMENT]
description = Load filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament into T{toolhead}..."
DEBUG_ECHO PREFIX="_IDEX_LOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
_LOAD_FILAMENT TOOLHEAD={toolhead} TEMP={temp} AUTOMATED={automated}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="Filament load routine for T{toolhead} complete, please check that the filament was loaded correctly."
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default(false)|lower == 'true' %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into hotend.."
G92 E0
G0 E{extruder_gear_to_cooling_position_distance} F{extruder_load_speed}
G92 E0
M400
RATOS_ECHO MSG="Filament loaded into hotend."
[gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set load_speed = printer["gcode_macro T%s" % toolhead].filament_load_speed|float * 60 %}
{% set filament_loading_nozzle_offset = printer["gcode_macro T%s" % toolhead].filament_loading_nozzle_offset|float %}
{% set cooling_position_to_nozzle_distance = printer["gcode_macro T%s" % toolhead].cooling_position_to_nozzle_distance|float %}
{% set purge_after_load = printer["gcode_macro T%s" % toolhead].purge_after_load|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into nozzle... Please wait!"
G92 E0
G0 E{cooling_position_to_nozzle_distance + filament_loading_nozzle_offset} F{load_speed}
G92 E0
G4 P1000
_PURGE_FILAMENT TOOLHEAD={toolhead} E={purge_after_load}
RATOS_ECHO MSG="Filament loaded into nozzle!"
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
{% set filament_grabbing_length = printer["gcode_macro T%s" % toolhead].filament_grabbing_length|float %}
{% set filament_grabbing_speed = printer["gcode_macro T%s" % toolhead].filament_grabbing_speed|float %}
{% set resume_after_insert = true if printer["gcode_macro T%s" % toolhead].resume_after_insert|default(true)|lower == 'true' else false %}
{% set enable_insert_detection = true if printer["gcode_macro T%s" % toolhead].enable_insert_detection|default(true)|lower == 'true' else false %}
{% set current_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% if enable_insert_detection %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="toolhead: {toolhead}, filament_grabbing_length: {filament_grabbing_length}, filament_grabbing_speed: {filament_grabbing_speed}, current_idex_mode: {current_idex_mode}"
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
RATOS_ECHO MSG="Filament inserted into T{toolhead}, loading..."
FORCE_MOVE STEPPER={'extruder%s' % ('' if toolhead == 0 else toolhead)} DISTANCE={filament_grabbing_length} VELOCITY={filament_grabbing_speed}
M400
{% if printer.pause_resume.is_paused %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% if resume_after_insert %}
RESUME
{% endif %}
{% else %}
{% if not printer.virtual_sdcard.is_active %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
[gcode_macro _PURGE_BEFORE_UNLOAD]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set purge_before_unload = printer["gcode_macro T%s" % toolhead].purge_before_unload|float %}
DEBUG_ECHO PREFIX="_PURGE_BEFORE_UNLOAD" MSG="TOOLHEAD: {toolhead}"
{% if purge_before_unload > 0 %}
G92 E0
G0 E{purge_before_unload} F300
G92 E0
M400
{% endif %}
[gcode_macro _PURGE_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set e = params.E|int %}
{% set r = params.R|default(0)|int %}
DEBUG_ECHO PREFIX="_PURGE_FILAMENT" MSG="TOOLHEAD: {toolhead}, E: {e}"
{% if e > 0 %}
G92 E0
G0 E{e} F300
G92 E0
M400
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={0.4 if toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={0.4 if toolhead == 1 else 0}
{% else %}
M106 S{(255 * 0.4)}
{% endif %}
{% endif %}
G4 P3000
{% if r > 0 %}
G92 E0
G0 E-{r} F300
G92 E0
M400
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{loading_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CLEANING_MOVE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_CLEANING_MOVE" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].parking_position is defined and printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% set cleaning_position = loading_position %}
{% if loading_position == parking_position %}
{% if loading_position > 0 %}
{% set cleaning_position = loading_position - 30 %}
{% else %}
{% set cleaning_position = loading_position + 30 %}
{% endif %}
{% endif %}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _BED_MESH_SANITY_CHECK]
gcode =
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is defined %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_start_print_true_zero_fuzzy_position %}
CONSOLE_ECHO TYPE="error" TITLE="Defined zero reference not compatible with fuzzy true zero" MSG="Using fuzzy start print true zero position is not compatible with a defined zero_reference_position value in the [bed_mesh] section in printer.cfg._N_Please remove the zero_reference_position value from the [bed_mesh] section, or disable fuzzy true zero position in printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_start_print_true_zero_fuzzy_position: False"
_STOP_AND_RAISE_ERROR MSG="Defined zero reference not compatible with fuzzy true zero"
{% elif zero_ref_pos[0]|float|round != safe_home_x|float|round or zero_ref_pos[1]|float|round != safe_home_y|float|round %}
CONSOLE_ECHO TYPE="error" TITLE="Zero reference position does not match safe home position" MSG="Please update your bed mesh zero reference position in printer.cfg, like so:_N__N_[bed_mesh]_N_zero_reference_position: {safe_home_x|float|round},{safe_home_y|float|round}_N_"
_STOP_AND_RAISE_ERROR MSG="Zero reference position does not match safe home position"
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if beacon_contact_bed_mesh %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact bed mesh is enabled" MSG="Beacon contact bed mesh is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_bed_mesh: False"
{% endif %}
{% if beacon_scan_method_automatic %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon 'automatic' scan method is enabled" MSG="Beacon 'automatic' scan method is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_scan_method_automatic: False"
{% endif %}
{% if beacon_contact_z_tilt_adjust %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact z-tilt adjust is enabled" MSG="Beacon contact z-tilt adjust is enabled. This is not recommended for normal use and may result in inaccurate z-tilt adjustment._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_z_tilt_adjust: False"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH]
gcode =
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE=None
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE=None
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION {rawparams}
{% endif %}
[gcode_macro _START_PRINT_BED_MESH]
variable_actual_true_zero_position_x = None
variable_actual_true_zero_position_y = None
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
SET_MACRO_TRAVEL_SETTINGS
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set X=[params.X0|default(-1)|float, params.X1|default(-1)|float] %}
{% set Y=[params.Y0|default(-1)|float, params.Y1|default(-1)|float] %}
DEBUG_ECHO PREFIX="_START_PRINT_BED_MESH" MSG="idex_mode: {idex_mode}, X: {X}, Y: {Y}"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is not defined %}
{% set zero_ref_pos = [safe_home_x if actual_true_zero_position_x is none else actual_true_zero_position_x, safe_home_y if actual_true_zero_position_y is none else actual_true_zero_position_y] %}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set X=[0, printable_x_max] %}
{% endif %}
{% set beacon_bed_mesh_scv = printer["gcode_macro RatOS"].beacon_bed_mesh_scv|default(25)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and not beacon_contact_bed_mesh %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={beacon_bed_mesh_scv}
{% endif %}
{% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %}
{% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %}
BED_MESH_CLEAR
{% if printer["gcode_macro RatOS"].adaptive_mesh|lower == 'true' %}
CALIBRATE_ADAPTIVE_MESH PROFILE="{default_profile}" X0={X[0]} X1={X[1]} Y0={Y[0]} Y1={Y[1]} T={params.T|int} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={idex_mode} ZERO_REF_POS_X={zero_ref_pos[0]} ZERO_REF_POS_Y={zero_ref_pos[1]}
{% else %}
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD="{default_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD="{printer["gcode_macro RatOS"].bed_mesh_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
[gcode_macro CALIBRATE_ADAPTIVE_MESH]
gcode =
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set default_profile = params.PROFILE %}
{% set x0 = params.X0|default(-1)|float %}
{% set y0 = params.Y0|default(-1)|float %}
{% set x1 = params.X1|default(-1)|float %}
{% set y1 = params.Y1|default(-1)|float %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Received coordinates X0={x0|round(1)} Y0={y0|round(1)} X1={x1|round(1)} Y1={y1|round(1)}"
{% if x0 >= x1 or y0 >= y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Invalid coordinates received. Please check your slicer settings. Falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if params.ZERO_REF_POS_X is defined and params.ZERO_REF_POS_Y is defined %}
{% set zero_ref_pos_x = params.ZERO_REF_POS_X|float %}
{% set zero_ref_pos_y = params.ZERO_REF_POS_Y|float %}
{% if zero_ref_pos_x < x0 or zero_ref_pos_x > x1 or zero_ref_pos_y < y0 or zero_ref_pos_y > y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Zero reference position X={zero_ref_pos_x|round(1)} Y={zero_ref_pos_y|round(1)} is outside the mesh region, expanding mesh region to include it."
{% set x0 = [x0, zero_ref_pos_x]|min %}
{% set y0 = [y0, zero_ref_pos_y]|min %}
{% set x1 = [x1, zero_ref_pos_x]|max %}
{% set y1 = [y1, zero_ref_pos_y]|max %}
{% endif %}
{% endif %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float %}
{% set mesh_x0 = [[x0, max_x]|min, min_x]|max %}
{% set mesh_y0 = [[y0, max_y]|min, min_y]|max %}
{% set mesh_x1 = [[x1, max_x]|min, min_x]|max %}
{% set mesh_y1 = [[y1, max_y]|min, min_y]|max %}
{% if mesh_x0 == min_x and mesh_y0 == min_y and mesh_x1 == max_x and mesh_y1 == max_y %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Print is using the full bed, falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% set probe_count_x = mesh_config.probe_count.split(",")[0]|int %}
{% if mesh_config.probe_count.split(",")|length == 2 %}
{% set probe_count_y = mesh_config.probe_count.split(",")[1]|int %}
{% else %}
{% set probe_count_y = mesh_config.probe_count.split(",")[0]|int %}
{% endif %}
{% set probe_x_step = (max_x - min_x) / probe_count_x %}
{% set probe_y_step = (max_y - min_y) / probe_count_y %}
{% set mesh_count_x = ([(mesh_x1 - mesh_x0) / probe_x_step, 3]|max)|int %}
{% set mesh_count_y = ([(mesh_y1 - mesh_y0) / probe_y_step, 3]|max)|int %}
{% set min_mesh_count = [mesh_count_x, mesh_count_y]|min %}
{% set max_mesh_count = [mesh_count_x, mesh_count_y]|max %}
{% set algorithm = mesh_config.algorithm %}
{% if algorithm|lower == 'lagrange' and max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="cannot exceed a probe_count of 6 when using lagrange interpolation. Falling back to bicubic interpolation."
{% set algorithm = 'bicubic' %}
{% endif %}
{% if algorithm|lower == 'bicubic' and min_mesh_count < 4 %}
{% if max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="invalid probe_count option when using bicubic interpolation. Combination of 3 points on one axis with more than 6 on another is not permitted. Forcing minimum mesh count to be 4."
{% set min_mesh_count = 4 %}
{% else %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="bicubic interpolation with a probe_count of less than 4 points detected. Forcing lagrange interpolation."
{% set algorithm = 'lagrange' %}
{% endif %}
{% endif %}
{% set mesh_count_x = ([min_mesh_count, mesh_count_x]|max)|int %}
{% set mesh_count_x = ([max_mesh_count, mesh_count_x]|min)|int %}
{% set mesh_count_y = ([min_mesh_count, mesh_count_y]|max)|int %}
{% set mesh_count_y = ([max_mesh_count, mesh_count_y]|min)|int %}
{% set should_prime = printer["gcode_macro RatOS"].nozzle_priming == 'primeblob' %}
{% if printer["dual_carriage"] is not defined %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% else %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 == 0 and not probe_first %}
{% set probe_first = true %}
{% endif %}
{% if should_prime and probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="mesh coordinates X0={mesh_x0|round(1)} Y0={mesh_y0|round(1)} X1={mesh_x1|round(1)} Y1={mesh_y1|round(1)}"
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y} RELATIVE_REFERENCE_INDEX=-1
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% if should_prime and not probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M84]
rename_existing = M84.1
gcode =
M84.1
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_OFFSET X=0 Y=0
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=SET_PRESSURE_ADVANCE VARIABLE=snyc_toolheads VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro _VAOC"] is defined %}
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started VALUE=False
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started_at_temp VALUE=False
{% endif %}
_IDEX_SINGLE INIT=1
{% endif %}
SET_SKEW CLEAR=1
_LED_MOTORS_OFF
[gcode_macro M104]
rename_existing = M104.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
DEBUG_ECHO PREFIX="M104" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set temperature_offset_t0 = printer["gcode_macro T0"].temperature_offset|default(0)|int %}
{% set temperature_offset_t1 = printer["gcode_macro T1"].temperature_offset|default(0)|int %}
{% set s0 = [s + temperature_offset_t0, 0]|max %}
{% set s1 = [s + temperature_offset_t1, 0]|max %}
{% if temperature_offset_t0 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t0}°C added to toolhead T0."
{% endif %}
{% if temperature_offset_t1 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t1}°C added to toolhead T1."
{% endif %}
{% else %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% else %}
M104.1 S{s} T{t}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M109]
rename_existing = M109.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
DEBUG_ECHO PREFIX="M109" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M109" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
M109.1 S{s} T{t}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro SET_HEATER_TEMPERATURE]
rename_existing = SET_HEATER_TEMPERATURE_BASE
gcode =
{% set heater = params.HEATER|default("") %}
{% set target = params.TARGET|default(0)|int %}
DEBUG_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="heater: {heater}, target: {target}"
{% set t = -1 %}
{% if heater|lower == "extruder" or heater|lower == "extruder1" %}
{% set t = 0 if heater|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and target > 0 %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set target = [target + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
SET_HEATER_TEMPERATURE_BASE HEATER="{heater}" TARGET={target}
{% if t != -1 and printer.fastconfig.settings.beacon is defined %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro TEMPERATURE_WAIT]
rename_existing = TEMPERATURE_WAIT_BASE
gcode =
{% set sensor = params.SENSOR|default("") %}
{% set minimum = params.MINIMUM|default(-1)|int %}
{% set maximum = params.MAXIMUM|default(-1)|int %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="sensor: {sensor}, minimum: {minimum}, maximum: {maximum}"
{% set t = -1 %}
{% if sensor|lower == "extruder" or sensor|lower == "extruder1" %}
{% set t = 0 if sensor|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and (minimum > 0 or maximum > 0) %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% if minimum > -1 %}
{% set minimum = [minimum + temperature_offset, 0]|max %}
{% endif %}
{% if maximum > -1 %}
{% set maximum = [maximum + temperature_offset, 0]|max %}
{% endif %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set id = "sensor " ~ sensor if t == -1 else "toolhead T" ~ t %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum} MAXIMUM={maximum}
{% elif minimum > -1 and maximum == -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum}
{% elif minimum == -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% else %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="neither MINIMUM or MAXIMUM args were specified, call TEMPERATURE_WAIT_BASE is expected to fail"
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}"
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for {id} reached."
[gcode_macro SDCARD_PRINT_FILE]
rename_existing = SDCARD_PRINT_FILE_BASE
gcode =
{% if printer["ratos"] is defined %}
PROCESS_GCODE_FILE { rawparams }
{% else %}
SDCARD_PRINT_FILE_BASE { rawparams }
{% endif %}
[gcode_macro SKEW_PROFILE]
rename_existing = SKEW_PROFILE_BASE
variable_loaded_profile = ""
gcode =
{% if params.LOAD is defined %}
{% if printer.fastconfig.settings["skew_correction %s" % params.LOAD] is defined %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='"{params.LOAD}"'
{% endif %}
{% endif %}
SKEW_PROFILE_BASE { rawparams }
[gcode_macro SET_SKEW]
rename_existing = SET_SKEW_BASE
gcode =
{% if params.CLEAR is defined %}
{% if params.CLEAR|default(0)|int == 1 %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='""'
{% endif %}
{% endif %}
SET_SKEW_BASE { rawparams }
[gcode_macro SET_VELOCITY_LIMIT]
rename_existing = SET_VELOCITY_LIMIT_BASE
gcode =
{% if params.ACCEL_TO_DECEL is defined %}
{% if params.ACCEL is defined %}
{% set accel = params.ACCEL|float %}
{% else %}
{% set accel = printer.toolhead.max_accel|float %}
{% endif %}
{% if params.VELOCITY is defined %}
{% set velocity = params.VELOCITY|float %}
{% else %}
{% set velocity = printer.toolhead.max_velocity|float %}
{% endif %}
{% if params.SQUARE_CORNER_VELOCITY is defined %}
{% set scv = params.SQUARE_CORNER_VELOCITY|float %}
{% else %}
{% set scv = printer.toolhead.square_corner_velocity|float %}
{% endif %}
{% set mcr = params.ACCEL_TO_DECEL|float / accel %}
DEBUG_ECHO PREFIX="SET_VELOCITY_LIMIT" MSG="ACCEL={accel}, VELOCITY={velocity}, SQUARE_CORNER_VELOCITY={scv}, MINIMUM_CRUISE_RATIO={mcr}"
SET_VELOCITY_LIMIT_BASE ACCEL={accel} VELOCITY={velocity} SQUARE_CORNER_VELOCITY={scv} MINIMUM_CRUISE_RATIO={1-mcr}
{% else %}
SET_VELOCITY_LIMIT_BASE { rawparams }
{% endif %}
[gcode_macro BED_MESH_CALIBRATE]
rename_existing = _BED_MESH_CALIBRATE_BASE
variable_abl_and_home_z_if_required = True
gcode =
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% if abl_and_home_z_if_required %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set beacon_default_probe_method = printer.fastconfig.settings.beacon.default_probe_method|default('proximity') %}
{% set probe_method = params.PROBE_METHOD|default(beacon_default_probe_method)|lower %}
{% if probe_method == 'proximity' %}
_CHECK_ACTIVE_BEACON_MODEL_TEMP TITLE="Bed mesh calibration warning"
{% endif %}
{% endif %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_BED_MESH_CALIBRATE_BASE {rawparams}
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_APPLY_RATOS_BED_MESH_PARAMETERS {rawparams}
{% endif %}
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_BASE
gcode =
DEBUG_ECHO PREFIX="SET_GCODE_OFFSET" MSG="{rawparams|replace('"', '')|replace("'", '')}"
{% set z_before = printer.gcode_move.homing_origin.z|float %}
SET_GCODE_OFFSET_BASE {rawparams}
_AFTER_SET_GCODE_OFFSET Z_BEFORE={z_before}
[gcode_macro _AFTER_SET_GCODE_OFFSET]
gcode =
{% set z_before = params.Z_BEFORE|float %}
{% set z_after = printer.gcode_move.homing_origin.z|float %}
{% if z_before != z_after %}
_ALERT_NON_ZERO_Z_OFFSET FORCE=1
{% endif %}
[gcode_macro _START_PRINT_PARK]
gcode =
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_x = printer["gcode_macro RatOS"].start_print_park_x %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% endif %}
{% if printer["dual_carriage"] is defined and not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% if printer["gcode_macro RatOS"].start_print_park_x is defined and printer["gcode_macro RatOS"].start_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="start_print_park_x is ignored for IDEX printers"
{% endif %}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={start_print_park_in} X={start_print_park_x}
G0 Z{z} F{z_speed}
[gcode_macro _END_PRINT_PARK]
gcode =
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro RatOS"].end_print_park_x is defined and printer["gcode_macro RatOS"].end_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="end_print_park_x is ignored for IDEX printers"
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x}
[gcode_macro _PARK]
gcode =
{% set x = params.X %}
{% set location = params.LOCATION|default('back')|lower %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set nozzle_priming = printer["gcode_macro RatOS"].nozzle_priming|lower %}
CACHE_TOOLHEAD_SETTINGS KEY="park"
SET_MACRO_TRAVEL_SETTINGS
{% if x != '' %}
{% if x|float >= printer.toolhead.axis_minimum.x + 5 and x|float <= printable_x_max - 5 %}
{% set park_x = x|float %}
{% else %}
{action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% else %}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% set park_y = printable_y_max - 15 %}
{% if location == 'front' %}
{% set park_y = printer.toolhead.axis_minimum.y + 5 %}
{% elif location == 'center' %}
{% set park_y = printable_y_max / 2 %}
{% elif location == 'primeblob' and printer["dual_carriage"] is defined %}
{% set park_y = printable_y_max - 15 %}
{% endif %}
{% if location == 'primeblob' and printer["dual_carriage"] is not defined %}
{% if (nozzle_priming == 'primeblob' or nozzle_priming == 'primeline') %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set park_x = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set park_x = printable_x_max - 5 %}
{% else %}
{% set park_x = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set park_y = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set park_y = printable_y_max - 5 %}
{% else %}
{% set park_y = nozzle_prime_start_y|float %}
{% endif %}
{% endif %}
{% endif %}
G90
{% if printer["dual_carriage"] is not defined %}
G0 X{park_x} Y{park_y} F{speed}
{% else %}
G0 Y{park_y} F{speed}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="park"
[gcode_macro SAVE_PROBE_RESULT]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
{% set last_z_offset = 9999.9 %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set current_z = printer.toolhead.position.z|float %}
{% if beacon_contact_prime_probing %}
{% set last_z_offset = printer.beacon.last_z_result %}
{% else %}
{% set last_z_offset = printer.beacon.last_sample.dist - current_z %}
{% endif %}
{% elif printer.fastconfig.settings.bltouch is defined %}
{% set config_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set config_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Saving offset adjustment of {last_z_offset} in {params.VARIABLE|default('last_z_offset')}"
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE={params.VARIABLE|default('last_z_offset')} VALUE={last_z_offset}
[gcode_macro PROBE_FOR_PRIMING]
gcode =
{% set probe_for_priming_disable_mesh_constraints = true if printer["gcode_macro RatOS"].probe_for_priming_disable_mesh_constraints|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower != 'false' %}
SAVE_GCODE_STATE NAME=probe_for_priming_state
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the prime location.."
CACHE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
SET_MACRO_TRAVEL_SETTINGS
{% set t = params.TOOLHEAD|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% if idex_mode == '' %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% if t == 0 %}
{% set x_start = 5 %}
{% else %}
{% set x_start = printable_x_max - 5 %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% endif %}
{% endif %}
{% set z = printer.fastconfig.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% if printer.fastconfig.settings.bltouch is defined %}
{% set x_offset = printer.fastconfig.settings.bltouch.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.bltouch.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set x_offset = printer.fastconfig.settings.probe.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.probe.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% elif printer.fastconfig.settings.beacon is defined %}
{% set x_offset = printer.fastconfig.settings.beacon.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.beacon.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.beacon.trigger_distance|float %}
{% else %}
{ action_raise_error("No probe, beacon or bltouch section found. Adaptive priming only works with a [probe], [beacon] or [bltouch] section defined.") }
{% endif %}
{% if z < z_offset %}
{ action_raise_error("Horizontal move Z ({z}) is below your probe's Z offset ({z_offset}). Please adjust your horizontal_move_z setting in [bed_mesh] to be above {z}.") }
{% endif %}
{% if not probe_for_priming_disable_mesh_constraints %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float - x_offset %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float - y_offset %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float - x_offset %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float - y_offset %}
{% set x_start = [[x_start, max_x]|min, min_x]|max %}
{% set y_start = [[y_start, max_y]|min, min_y]|max %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the start of the prime location at {x_start}, {y_start}"
G90
M83
G0 Z{z} F{z_speed}
G1 X{x_start} Y{y_start} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result
{% endif %}
{% if idex_mode == '' %}
{% set x_end = x_start %}
{% set y_end = y_start + 45 %}
{% else %}
{% if t==1 %}
{% set x_end = x_start - 45 %}
{% else %}
{% set x_end = x_start + 45 %}
{% endif %}
{% set y_end = y_start %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the end of the prime location at {x_end}, {y_end}"
G1 X{x_end} Y{y_end} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result
{% endif %}
RESTORE_GCODE_STATE NAME=probe_for_priming_state
RESTORE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
{% endif %}
[gcode_macro RESET_PRIME_PROBE_STATE]
gcode =
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result VALUE=None
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result_t1 VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result_t1 VALUE=None
{% endif %}
[gcode_macro PROBE_CURRENT_POSITION]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
SAVE_GCODE_STATE NAME=probe_current_position_state
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
ASSERT_PROBE_DEPLOYED
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
BEACON_QUERY
{% else %}
RESTORE_GCODE_STATE NAME=probe_current_position_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_z_speed|float}
{% endif %}
[gcode_macro PRIME_BLOB]
description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro.
variable_x_offset = 5
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="prime_blob"
SET_MACRO_TRAVEL_SETTINGS
RATOS_ECHO PREFIX="Priming" MSG="Priming nozzle with prime blob.."
{% set current_toolhead = 0 %}
{% set target_idex_mode = '' %}
{% set extruder = 'extruder' %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE is defined %}
{% set target_idex_mode = params.IDEX_MODE|default('')|lower %}
{% else %}
{ action_raise_error("IDEX_MODE parameter not found for PRIME_BLOB macro. This is likely a bug.") }
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Priming in IDEX {target_idex_mode} mode.."
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set current_toolhead = 1 if current_idex_mode=='primary' else 0 %}
{% set extruder = 'extruder1' if current_toolhead == 1 else 'extruder' %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
SAVE_GCODE_STATE NAME=prime_blob_state
{% endif %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|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 fan_speed = printer["gcode_macro RatOS"].nozzle_prime_bridge_fan|float %}
{% set nozzle_diameter = printer.fastconfig.settings[extruder].nozzle_diameter|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set has_start_offset_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) != 9999.9 %}
{% if printer["dual_carriage"] is defined %}
{% set has_start_offset_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) != 9999.9 %}
{% endif %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_z_height = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set nozzle_prime_direction = printer["gcode_macro RatOS"].nozzle_prime_direction|lower %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% if target_idex_mode == '' %}
{% set x_factor = 0 %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% set y_factor = 1 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% set y_factor = -1 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% if nozzle_prime_start_y|float < printable_y_max / 2 %}
{% set y_factor = 1 %}
{% else %}
{% set y_factor = -1 %}
{% endif %}
{% endif %}
{% if nozzle_prime_direction == 'forwards' %}
{% set y_factor = 1 %}
{% elif nozzle_prime_direction == 'backwards' %}
{% set y_factor = -1 %}
{% endif %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% else %}
{% set z = start_print_park_z_height %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% set y_factor = 0 %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set x_start = center_x / 2 + 5 %}
{% set x_factor = 1 %}
{% else %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% if current_toolhead == 0 %}
{% set x_start = 55 %}
{% set x_factor = -1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 55 %}
{% set x_factor = 1 %}
{% endif %}
{% else %}
{% if current_toolhead == 0 %}
{% set x_start = 5 %}
{% set x_factor = 1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 5 %}
{% set x_factor = -1 %}
{% endif %}
{% endif %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_x_max - 5 %}
{% endif %}
{% set z = 10 %}
{% endif %}
{% set start_z_offset = 0 %}
{% set end_z_offset = 0 %}
{% if has_start_offset_t0 %}
{% set start_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %}
{% set end_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_end_result|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t0) ) }
{% endif %}
{% if end_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t0) ) }
{% endif %}
{% set start_z_offset = start_z_probe_result_t0 %}
{% set end_z_offset = end_z_probe_result_t0 %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if current_toolhead == 1 or both_toolheads or target_idex_mode == "copy" or target_idex_mode == "mirror" %}
{% if has_start_offset_t1 %}
{% set start_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) %}
{% set end_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_end_result_t1|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t1) ) }
{% endif %}
{% if end_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t1) ) }
{% endif %}
{% set start_z_offset = [start_z_offset, start_z_probe_result_t1]|max %}
{% set end_z_offset = [end_z_offset, start_z_probe_result_t1]|max %}
{% endif %}
{% endif %}
{% if target_idex_mode != 'copy' and target_idex_mode != 'mirror' %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% set original_start_z_offset = start_z_offset %}
{% set original_end_z_offset = end_z_offset %}
{% set start_z_offset = original_end_z_offset %}
{% set end_z_offset = original_start_z_offset %}
{% endif %}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
DEBUG_ECHO PREFIX="PRIME_BLOB" MSG="x_start: {x_start}, y_start: {y_start}, x_factor: {x_factor}, y_factor: {y_factor}, z: {z}, start_z_offset: {start_z_offset}, end_z_offset: {end_z_offset}"
G90
M83
RATOS_ECHO PREFIX="Priming" MSG="Lifting Z to {z}.."
G0 Z{z} F{z_speed}
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% if start_print_park_in != 'primeblob' %}
G1 X{x_start} F{speed}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% endif %}
{% else %}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% if target_idex_mode=="copy" or target_idex_mode=="mirror" %}
RATOS_ECHO PREFIX="Priming" MSG="Mirroring move to {x_start}, {y_start} along the edge of the print area.."
_IDEX_MIRROR PRIMING=1
{% else %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% endif %}
G1 X{x_start} F{speed}
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Starting prime blob.."
G1 Z{0.5 + start_z_offset} F{z_speed}
G1 Y{y_start} F{speed}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
M106 S{fan_speed}
G1 Z5 F100 E5
G92 E0
RATOS_ECHO PREFIX="Priming" MSG="Bridging with {((fan_speed/255) * 100)|int}% fan speed.."
G1 F3000 X{x_start + (15 * x_factor)} Y{y_start + (15 * y_factor)} E{1 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (20 * x_factor)} Y{y_start + (20 * y_factor)} Z{3.8 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (34 * x_factor)} Y{y_start + (34 * y_factor)} Z{2.6 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (38 * x_factor)} Y{y_start + (38 * y_factor)} Z{1.4 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (42 * x_factor)} Y{y_start + (42 * y_factor)} Z{0.2 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
M106 S0
G1 F3000 X{x_start + (46 * x_factor)} Y{y_start + (46 * y_factor)} Z{0.2 + end_z_offset} E0.6
G1 F{speed} X{x_start + (50 * x_factor)} Y{y_start + (50 * y_factor)}
{% if target_idex_mode == "copy" or target_idex_mode == "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if target_idex_mode == "copy" %}
{% if first_y >= 0 %}
_IDEX_COPY DANCE=0 Y={first_y}
{% else %}
_IDEX_COPY DANCE=0 Y={params.Y1}
{% endif %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
RESTORE_GCODE_STATE NAME=prime_blob_state
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="prime_blob"
G92 E0
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_UNLOAD_FILAMENT]
description = Unload filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_UNLOAD_FILAMENT" MSG="TEMP: {temp}"
_LED_UNLOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=unload_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD=0 NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
{% endif %}
RESTORE_GCODE_STATE NAME=unload_state
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament unloading completed"
[gcode_macro _IDEX_UNLOAD_FILAMENT]
description = Unload filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading T{toolhead} filament..."
DEBUG_ECHO PREFIX="_IDEX_UNLOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} AUTOMATED={automated}
{% endif %}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="T{toolhead} filament unloading completed"
[gcode_macro _UNLOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LEGACY_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 =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set unload_speed = 5 * 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 F6000
G0 E-15 F6000
G0 E-{unload_length} F{unload_speed}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Unloading filament from nozzle to cooling zone... Please wait!"
_PURGE_BEFORE_UNLOAD TOOLHEAD={toolhead}
{% if printer["gcode_macro _UNLOAD_WITHOUT_TIP_FORMING"] is defined %}
_UNLOAD_WITHOUT_TIP_FORMING TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
{% else %}
_UNLOAD_WITH_TIP_FORMING NAME='{filament_name}' TYPE='{filament_type}'
{% endif %}
G4 P3000
[gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
{% set tooolhead_sensor_to_extruder_gear_distance = printer["gcode_macro T%s" % toolhead].tooolhead_sensor_to_extruder_gear_distance|float %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER" MSG="TOOLHEAD: {toolhead}"
G0 E-{extruder_gear_to_cooling_position_distance + tooolhead_sensor_to_extruder_gear_distance + 50} F{extruder_load_speed}
RATOS_ECHO MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_WITH_TIP_FORMING]
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% if filament_name != '' and filament_type != '' %}
_UNLOAD_KNOWN_FILAMENT NAME={filament_name} TYPE={filament_type}
{% else %}
_UNLOAD_UNKNOWN_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _UNLOAD_KNOWN_FILAMENT]
description = User overrideable tip forming macro if slicer filament profiles are known
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
RATOS_ECHO PREFIX="FILAMENT TYPE" MSG='{filament_type}'
RATOS_ECHO PREFIX="FILAMENT PROFILE" MSG='{filament_name}'
{% if filament_name == "Prusament PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% elif filament_name == "Nobufil PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% else %}
RATOS_ECHO PREFIX="_UNLOAD_KNOWN_FILAMENT" MSG="Filament profile not found!"
_UNLOAD_UNKNOWN_FILAMENT
{% endif %}
[gcode_macro _UNLOAD_UNKNOWN_FILAMENT]
description = User overrideable standard tip forming macro
gcode =
DEBUG_ECHO PREFIX="_UNLOAD_UNKNOWN_FILAMENT" MSG="Using standard tip forming macro!"
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
[gcode_macro _TIP_FORMING]
gcode =
{% set cooling_moves = params.COOLING_MOVES|default(4)|int %}
{% set cooling_move_length = params.COOLING_MOVE_LENGTH|default(10)|float %}
{% set start_cooling_speed = params.START_COOLING_SPEED|default(10)|float * 60 %}
{% set end_cooling_speed = params.END_COOLING_SPEED|default(50)|float * 60 %}
{% if cooling_moves == 0 %}
{% set cooling_move_length = 0 %}
{% endif %}
{% set dip = true if params.DIP|default(false)|lower == "true" else false %}
{% set dip_length = params.DIP_LENGTH|default(22)|float %}
{% set dip_speed = params.DIP_SPEED|default(30)|float * 60 %}
{% set dip_retract_speed = params.DIP_RETRACT_SPEED|default(70)|float * 60 %}
{% set retract_length = params.RETRACT_LENGTH|default(18)|float %}
{% set start_retract_speed = params.START_RETRACT_SPEED|default(120)|float * 60 %}
{% set end_retract_speed = params.END_RETRACT_SPEED|default(20)|float * 60 %}
DEBUG_ECHO PREFIX="_TIP_FORMING" MSG="cooling_moves: {cooling_moves}, cooling_move_length: {cooling_move_length}, start_cooling_speed: {start_cooling_speed}, end_cooling_speed: {end_cooling_speed}, dip: {dip}, dip_length: {dip_length}, dip_speed: {dip_speed}, dip_retract_speed: {dip_retract_speed}, retract_length: {retract_length}, start_retract_speed: {start_retract_speed}, end_retract_speed: {end_retract_speed}"
M220 S100
G92 E0
{% set retract = retract_length + cooling_move_length / 2 - 15 %}
G1 E-15 F{start_retract_speed}
G1 E-{0.7 * retract} F{1.0 * end_retract_speed}
G1 E-{0.2 * retract} F{0.5 * end_retract_speed}
G1 E-{0.1 * retract} F{0.3 * end_retract_speed}
G92 E0
{% if cooling_moves > 0 %}
{% set i = (end_cooling_speed - start_cooling_speed) / (2 * cooling_moves - 1) %}
{% for m in range(cooling_moves) %}
G1 E{cooling_move_length} F{(start_cooling_speed + i * m * 2)}
G1 E-{cooling_move_length} F{(start_cooling_speed + i * (m * 2 + 1))}
{% endfor %}
{% endif %}
G92 E0
{% if dip %}
G1 E{dip_length} F{dip_speed}
G4 P100
G1 E-{dip_length} F{dip_retract_speed}
{% endif %}
G92 E0
M400
[delayed_gcode __ON_FILAMENT_SENSOR_BUTTON_PRESSED_STARTUP_GUARD]
initial_duration = 2.
gcode =
SET_GCODE_VARIABLE MACRO=_ON_FILAMENT_SENSOR_BUTTON_PRESSED VARIABLE=startup_complete VALUE=True
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
variable_startup_complete = False
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set toolhead_sensor_button_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_sensor_button_only_when_sensor_enabled|default(false)|lower == 'true' %}
{% if not startup_complete and sensor_enabled %}
{action_emergency_stop("RatOS: The T%s filament sensor button was triggered immediately on printer startup. This is likely a false trigger. Please check your filament sensor wiring and configuration!" % (toolhead,))}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}, SENSOR_ENABLED: {sensor_enabled}, TOOLHEAD_SENSOR_BUTTON_ONLY_WHEN_SENSOR_ENABLED: {toolhead_sensor_button_only_when_sensor_enabled}"
{% if not printer.virtual_sdcard.is_active and (sensor_enabled or not toolhead_sensor_button_only_when_sensor_enabled) %}
UNLOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
{% set toolhead_detect_clog_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_detect_clog_only_when_sensor_enabled|default(true)|lower == 'true' %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}, ENABLE_CLOG_DETECTION: {enable_clog_detection}, TOOLHEAD_DETECT_CLOG_ONLY_WHEN_SENSOR_ENABLED: {toolhead_detect_clog_only_when_sensor_enabled}, SENSOR_ENABLED: {sensor_enabled}"
{% if enable_clog_detection and (sensor_enabled or not toolhead_detect_clog_only_when_sensor_enabled) %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_FILAMENT_END]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set clogged = true if params.CLOGGED|default(false)|lower == 'true' else false %}
{% set unload_after_runout = printer["gcode_macro T%s" % toolhead].unload_after_runout|float %}
{% if clogged %}
_LED_FILAMENT_CLOG TOOLHEAD={toolhead}
{% else %}
_LED_FILAMENT_RUNOUT TOOLHEAD={toolhead}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_END" MSG="TOOLHEAD: {toolhead}"
{% if printer.virtual_sdcard.is_active %}
{% if not printer.pause_resume.is_paused %}
PAUSE RUNOUT=True
{% endif %}
{% if not clogged and unload_after_runout %}
UNLOAD_FILAMENT TOOLHEAD={toolhead} AUTOMATED=True
{% endif %}
{% if not clogged and printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true'%}
_JOIN_SPOOL TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M600]
description = Executes a color change by pausing the printer an unloading the filament.
gcode =
PAUSE
UNLOAD_FILAMENT AUTOMATED=True
RATOS_ECHO MSG="Please load new filament and resume"
[gcode_macro COLD_PULL]
description = Automated hotend cold pull.
gcode =
{% set extrusion_temp = params.EXTRUSION_TEMP|default(220)|int %}
{% set cold_pull_temp = params.COLD_PULL_TEMP|default(80)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% if printer["dual_carriage"] is not defined %}
{% set toolhead = 0 %}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead != 0 and toolhead != 1 %}
{action_raise_error("Please select toolhead! 0 = left, 1 = right toolhead")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
RATOS_ECHO MSG="Starting cold pull on T{toolhead}..."
{% else %}
RATOS_ECHO MSG="Starting cold pull..."
{% endif %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if printer["dual_carriage"] is defined and "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
RATOS_ECHO MSG="Heating T{toolhead} to {extrusion_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={extrusion_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={extrusion_temp} MAXIMUM={extrusion_temp + 2}
G4 P3000
RATOS_ECHO MSG="extruding..."
G92 E0
G1 E30 F300
G92 E0
RATOS_ECHO MSG="Cooling T{toolhead} to {cold_pull_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={cold_pull_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={cold_pull_temp} MAXIMUM={cold_pull_temp + 2}
G4 P10000
RATOS_ECHO MSG="cold pull..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-40 VELOCITY=5 ACCEL=100
RATOS_ECHO MSG="eject filament..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-200 VELOCITY=20 ACCEL=500
RATOS_ECHO MSG="cooling down extruder..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET=0
RESTORE_GCODE_STATE NAME=cold_pull_state
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
CONSOLE_ECHO TITLE="Cold pull complete" MSG="Please remove the filament from the PTFE tube and cut the end off. Do NOT try to load it again." TYPE="warning"
[gcode_macro _USER_START_PRINT_BEFORE_HOMING]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_BED]
gcode =
[gcode_macro _USER_START_PRINT_BED_MESH]
gcode =
[gcode_macro _USER_START_PRINT_PARK]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
[gcode_macro _USER_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 =
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
[gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_PARK]
gcode =
[gcode_macro _USER_END_PRINT_FINISHED]
description = User hook for when the print is finished after gcode state has been restored.
gcode =
[gcode_macro _USER_START_PRINT]
gcode =
[gcode_macro _USER_END_START_PRINT]
gcode =
[gcode_macro _USER_START_FEATURE]
gcode =
[gcode_macro _USER_END_FEATURE]
gcode =
[gcode_macro _USER_BEFORE_IDLE_TIMEOUT]
gcode =
[gcode_macro _USER_AFTER_IDLE_TIMEOUT]
gcode =
[gcode_macro ECHO_T_VARS]
description = Echo Toolhead variables to the console.
gcode =
{% set t = params.T|default(0) %}
RATOS_ECHO MSG="T{t} Variables"
{% for var, value in printer["gcode_macro T%s" % t].items() %}
{action_respond_info(var ~ ": " ~ value)}
{% endfor %}
[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 ENSURE_CRITICAL_RATOS_INIT]
variable_completed = False
gcode =
{% if not completed %}
CALCULATE_PRINTABLE_AREA
SET_GCODE_VARIABLE MACRO=ENSURE_CRITICAL_RATOS_INIT VARIABLE=completed VALUE=True
{% endif %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
{action_respond_info("Initializing RatOS...")}
ENSURE_CRITICAL_RATOS_INIT
_LED_STANDBY
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
{% if printer.fastconfig.settings.beacon is defined %}
_BED_MESH_SANITY_CHECK
{% endif %}
{% set svv = printer.save_variables.variables %}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=0 C={svv.nozzle_expansion_coefficient_t0|default(0.06)|float}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=1 C={svv.nozzle_expansion_coefficient_t1|default(0.06)|float}
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=idex_applied_offset
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
ENSURE_CRITICAL_RATOS_INIT
HELLO_RATOS
_ALERT_NON_ZERO_Z_OFFSET
[gcode_macro _ALERT_NON_ZERO_Z_OFFSET]
gcode =
{% set force = params.FORCE|default(0)|int == 1 %}
{% set user_offset = printer.named_offsets.user_probe_z_offset.z|float %}
{% set gcode_offset = printer.gcode_move.homing_origin.z|float %}
{% set combined_offset = user_offset + gcode_offset %}
{% if force or user_offset != 0 or gcode_offset != 0 %}
{% set title = "User-adjusted Z-offset of %.3f mm is active" % combined_offset %}
{% set msg = "" %}
{% set nl = "" %}
{% if user_offset != 0 %}
{% set msg = msg + "beacon true zero user Z-offset: %.3f mm (to clear, use Z_OFFSET_APPLY_PROBE CLEAR=1)" % user_offset %}
{% set nl = "_N_" %}
{% endif %}
{% if gcode_offset != 0 %}
{% set msg = msg + nl + "G-code Z-offset: %.3f mm" % gcode_offset %}
{% endif %}
CONSOLE_ECHO TITLE="{title}" TYPE="info" MSG="{msg}"
{% endif %}
[gcode_macro _INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE]
gcode =
{% set variable = params.VARIABLE|string %}
{% set svv = printer.save_variables.variables %}
{% set nlu_msg = "no longer used, please remove" %}
{% if svv[variable] is defined %}
{% set v = svv[variable]|string|replace('"', '')|replace("'", "") %}
{% if not nlu_msg in v %}
SAVE_VARIABLE VARIABLE={variable} VALUE='"{nlu_msg} (was {v})"'
{% endif %}
CONSOLE_ECHO TITLE="Deprecated ratos-variables.cfg variable" TYPE="warning" MSG="The variable {variable} is no longer used, please remove it from your ratos-variables.cfg file."
{% endif %}
[gcode_macro _NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK]
gcode =
{% set t = params.T|int %}
{% set c = params.C|float %}
{% set normal_low = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_low|default(0.05)|float %}
{% set normal_high = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_high|default(0.10)|float %}
{% if c < 0 %}
{action_emergency_stop("Invalid nozzle_expansion_coefficient_t%s value in ratos-variables.cfg: %.3f. It must be non-negative." % (t, c))}
{% endif %}
{% if c >= normal_high %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite high. Please verify that this is correct."
{% endif %}
{% if c <= normal_low %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite low. Please verify that this is correct."
{% endif %}
[gcode_macro INITIAL_FRONTEND_UPDATE]
gcode =
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_error = printer["gcode_macro RatOS"].status_color_error|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_unknown}"'
{% endif %}
{% set t0_sensor = "undefined" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].filament_detected|lower == "true" %}
{% set t0_sensor = "detected" %}
{% else %}
{% set t0_sensor = "empty" %}
{% endif %}
{% else %}
{% set t0_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set t1_sensor = "undefined" %}
{% if printer["dual_carriage"] is defined and printer["filament_switch_sensor toolhead_filament_sensor_t1"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].filament_detected|lower == "true" %}
{% set t1_sensor = "detected" %}
{% else %}
{% set t1_sensor = "empty" %}
{% endif %}
{% else %}
{% set t1_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% if svv.t0_filament is defined and printer["gcode_macro T0"] is defined %}
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
{% if t0_sensor != "empty" %}
{% set t0_filament_type = svv.t0_filament[0]|default('')|string %}
{% set t0_filament_name = svv.t0_filament[1]|default('')|string %}
{% set t0_filament_temp = svv.t0_filament[2]|default(0)|float %}
{% if t0_filament_name != '' and t0_filament_type != '' and t0_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{t0_filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{t0_filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={t0_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
{% if svv.t1_filament is defined and printer["gcode_macro T1"] is defined %}
{% if printer["gcode_macro T1"].filament_name is defined and printer["gcode_macro T1"].filament_type is defined and printer["gcode_macro T1"].filament_temp is defined %}
{% if t1_sensor != "empty" %}
{% set t1_filament_type = svv.t1_filament[0]|default('')|string %}
{% set t1_filament_name = svv.t1_filament[1]|default('')|string %}
{% set t1_filament_temp = svv.t1_filament[2]|default(0)|float %}
{% if t1_filament_name != '' and t1_filament_type != '' and t1_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='"{t1_filament_name}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='"{t1_filament_type}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE={t1_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t1_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro CALCULATE_PRINTABLE_AREA]
variable_calculated = False
gcode =
{% if not calculated %}
{% set bed_margin_x = printer["gcode_macro RatOS"].bed_margin_x %}
{% set bed_margin_y = printer["gcode_macro RatOS"].bed_margin_y %}
{% set tool = 0 if printer["gcode_macro T0"] is not defined or printer["gcode_macro T0"].active else 1 %}
{% set max_x = printer.toolhead.axis_maximum.x if printer["dual_carriage"] is defined and tool == 0 else printer.toolhead.axis_maximum.x - bed_margin_x[1] %}
{% if printer["dual_carriage"] is defined %}
{% set max_x = printer.toolhead.axis_maximum.x %}
{% endif %}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="printer.toolhead.axis_maximum.x {printer.toolhead.axis_maximum.x}"
{% set max_y = printer.toolhead.axis_maximum.y - bed_margin_y[1]%}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_x_max VALUE={max_x}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_y_max VALUE={max_y}
SET_GCODE_VARIABLE MACRO=CALCULATE_PRINTABLE_AREA VARIABLE=calculated VALUE=True
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
RATOS_LOG PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
{% endif %}
[gcode_macro CACHE_TOOLHEAD_SETTINGS]
variable_cache = {"global": {"accel": 1000, "ratio": 0.5, "speed": 50, "scv": 5}}
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set dummy = cache.__setitem__(key, {"accel": printer.toolhead.max_accel, "ratio": printer.toolhead.minimum_cruise_ratio, "speed": printer.toolhead.max_velocity, "scv": printer.toolhead.square_corner_velocity}) %}
SET_GCODE_VARIABLE MACRO=CACHE_TOOLHEAD_SETTINGS VARIABLE=cache VALUE="{cache | pprint | replace("\n", "") | replace("\"", "\\\"")}"
DEBUG_ECHO PREFIX="CACHE_TOOLHEAD_SETTINGS" MSG="Toolhead settings cached for {key}. {printer.toolhead.max_accel} accel, {printer.toolhead.minimum_cruise_ratio} ratio, {printer.toolhead.max_velocity} velocity, {printer.toolhead.square_corner_velocity} scv."
[gcode_macro RESTORE_TOOLHEAD_SETTINGS]
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set values = printer["gcode_macro CACHE_TOOLHEAD_SETTINGS"].cache.__getitem__(key) %}
{% if values is not defined or values == 'None' %}
{ action_raise_error("RESTORE_TOOLHEAD_SETTINGS: Toolhead settings not cached for key '" ~ key ~ "'.") }
{% endif %}
SET_VELOCITY_LIMIT ACCEL={values.accel} MINIMUM_CRUISE_RATIO={values.ratio} VELOCITY={values.speed} SQUARE_CORNER_VELOCITY={values.scv}
DEBUG_ECHO PREFIX="RESTORE_TOOLHEAD_SETTINGS" MSG="Toolhead settings restored. {values.accel} accel, {values.ratio} ratio, {values.speed} velocity, {values.scv} scv."
[gcode_macro SET_MACRO_TRAVEL_SETTINGS]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float %}
{% set accel = printer["gcode_macro RatOS"].macro_travel_accel %}
SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0.5 VELOCITY={speed} SQUARE_CORNER_VELOCITY={5}
DEBUG_ECHO PREFIX="SET_MACRO_TRAVEL_SETTINGS" MSG="Macro travel settings set. {accel} accel, {speed} velocity"
[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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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
{% if printer["dual_carriage"] is not defined %}
SET_KINEMATIC_POSITION X={printable_x_max / 2} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
{% else %}
IDEX_SET_CENTER_KINEMATIC_POSITION
{% endif %}
[gcode_macro IDEX_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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set center_x = printable_x_max / 2 %}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x - (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x + (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
[gcode_macro VERIFY_HYBRID_INVERTED]
gcode =
{% set inverted = False %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy is defined and printer.fastconfig.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy.inverted|lower == 'true' %}
{% set inverted = True %}
{% endif %}
{% endif %}
{% if inverted == False %}
{ action_emergency_stop("ratos_hybrid_corexy NOT INVERTED! Inverted hybrid core-xy bugfix not detected.") }
{% endif %}
[gcode_macro RATOS_ECHO]
gcode =
{% set prefix = "RatOS" %}
{% set debug = params.DEBUG|default(0)|int %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " | " ~ params.PREFIX %}
{% endif %}
{% set prefix = prefix ~ ":" %}
{% set msg = "" %}
{% if params.MSG is defined %}
{% set msg = params.MSG %}
{% else %}
{% set msg = "No msg parameter provided (this is a bug or unintended use)." %}
{% endif %}
{% if not debug %}
M117 {prefix} {msg}
{% endif %}
RATOS_LOG PREFIX="{prefix}" MSG="{msg}"
{% if not debug %}
RESPOND PREFIX="{prefix}" MSG="{msg}"
{% else %}
CONSOLE_ECHO TITLE="{prefix}" TYPE="debug" MSG="{msg}"
{% endif %}
[gcode_macro ENABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=True
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=prefix_filter VALUE="'{params.FILTER|default('')|lower}'"
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging enabled."
[gcode_macro DISABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=False
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging disabled."
[gcode_macro DEBUG_ECHO]
variable_enabled = False
variable_prefix_filter = ''
gcode =
{% set prefix = "DEBUG" %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " - " ~ params.PREFIX %}
{% endif %}
{% if enabled and (prefix_filter|lower == '' or prefix_filter|lower in params.PREFIX|lower) %}
RATOS_ECHO PREFIX="{prefix}" MSG="{params.MSG}" DEBUG=1
{% endif %}
[gcode_macro START_FEATURE]
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="Start {params.FEATURE} feature gcode"
{% set scv = printer.toolhead.square_corner_velocity|int|default(5) %}
{% set accel = printer.toolhead.max_accel|int|default(10000) %}
{% set ratio = printer.toolhead.minimum_cruise_ratio|float|default(0.5) %}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="scv" VALUE={scv}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="accel" VALUE={accel}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="ratio" VALUE={ratio}
_USER_START_FEATURE FEATURE="{params.FEATURE}"
[gcode_macro END_FEATURE]
variable_scv = 5
variable_accel = 10000
variable_ratio = 0.5
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="End {params.FEATURE} feature gcode"
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={scv} ACCEL={accel} MINIMUM_CRUISE_RATIO={ratio}
_USER_END_FEATURE FEATURE="{params.FEATURE}" SCV={scv} ACCEL={accel} RATIO={ratio}
[gcode_macro _ON_LAYER_CHANGE]
variable_layer_number = 0
description = INTERNAL USE ONLY. Call it from the slicers after layer change custom gcode
gcode =
{% set layer = params.LAYER|int %}
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE={layer}
SET_PRINT_STATS_INFO CURRENT_LAYER={layer}
[gcode_macro _LEARN_MORE_CALIBRATION]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/calibration" %}
{% set link_text = "RatOS Calibration Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_CHAMBER_FILTER]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter Control" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_FILAMENT]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/filaments" %}
{% set link_text = "RatOS Filament Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _CONSOLE_SAVE_CONFIG]
gcode =
M118 Click SAVE_CONFIG to save the settings to your printer.cfg.
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.fastconfig.config["skew_correction %s" % ratos_skew_profile] is defined %}
SKEW_PROFILE LOAD={ratos_skew_profile}
GET_CURRENT_SKEW
{% else %}
{% set line_1 = '"Could not find skew profile %s!_N_Clearing skew correction."' % ratos_skew_profile %}
CONSOLE_ECHO TITLE="Missing skew profile!" TYPE="warning" MSG={line_1}
SET_SKEW CLEAR=1
{% endif %}
{% endif %}
[gcode_macro M601]
gcode =
PAUSE
[gcode_macro _STOP_AND_RAISE_ERROR]
gcode =
M84
_RAISE_ERROR MSG="{params.MSG}"
[gcode_macro PAUSE]
description = Pauses the print
rename_existing = PAUSE_BASE
variable_extrude = 1.5
variable_retract = 1.5
variable_fan_speed = 0
variable_idex_mode = ""
variable_idex_toolhead = 0
variable_idex_toolhead_x = 0.0
variable_idex_toolhead_y = 0.0
variable_idex_toolhead_z = 0.0
gcode =
RATOS_ECHO MSG="Pausing print..."
{% set runout_detected = true if params.RUNOUT|default(false)|lower == 'true' else false %}
_LED_PAUSE
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
SAVE_GCODE_STATE NAME=PAUSE_state
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_mode VALUE='"{idex_mode}"'
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead VALUE={idex_toolhead}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_x VALUE={printer.gcode_move.gcode_position.x|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_y VALUE={printer.gcode_move.gcode_position.y|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_z VALUE={printer.gcode_move.gcode_position.z|float}
DEBUG_ECHO PREFIX="PAUSE" MSG="idex_mode: {idex_mode}, idex_toolhead: {idex_toolhead}, idex_toolhead_x: {idex_toolhead_x}, idex_toolhead_y: {idex_toolhead_y}, idex_toolhead_z: {idex_toolhead_z}"
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
CACHE_TOOLHEAD_SETTINGS KEY="pause"
SET_MACRO_TRAVEL_SETTINGS
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% if current_z < (max_z - 20.0) %}
{% set z_safe = 20.0 %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
PAUSE_BASE
{% if printer["dual_carriage"] is not defined %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan"].speed|float}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
{% if idex_toolhead == 0 %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t1"].speed|float}
{% endif %}
{% endif %}
{% endif %}
M106 S0
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set R = printer["gcode_macro PAUSE"].retract|float %}
{% if can_extrude %}
G91
G1 E-{R} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].pause_print_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].pause_print_park_in %}
{% if runout_detected %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].runout_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].runout_park_in %}
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
DEBUG_ECHO PREFIX="PAUSE" MSG="z_speed: {z_speed}, pause_print_park_x: {pause_print_park_x}, pause_print_park_in: {pause_print_park_in}, default_toolhead: {default_toolhead}"
{% if "xyz" in printer.toolhead.homed_axes %}
G91
G1 Z{z_safe} F{z_speed}
G90
{% if printer["dual_carriage"] is not defined %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% else %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
_IDEX_SINGLE X={parking_position}
{% else %}
PARK_TOOLHEAD
{% endif %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% endif %}
{% else %}
{action_respond_info("Printer not homed")}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="pause"
RATOS_ECHO MSG="Print paused"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
RATOS_ECHO MSG="Resuming print..."
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set target_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set target_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if target_idex_mode != '' %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set fan_speed = printer["gcode_macro PAUSE"].fan_speed|float %}
{% if printer["dual_carriage"] is not defined %}
M106 S{(fan_speed * 255)}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% else %}
{% if params.TOOLHEAD is defined %}
{% if params.TOOLHEAD == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% else %}
{% if printer["gcode_macro PAUSE"].idex_toolhead == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% endif %}
{% endif %}
M106.1 S{fan_speed}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY DANCE=0
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR DANCE=0
{% else %}
{% if params.TOOLHEAD is defined %}
_SELECT_TOOL T={params.TOOLHEAD} X=-1 Y=-1 TOOLSHIFT=false
{% else %}
_SELECT_TOOL T={printer["gcode_macro PAUSE"].idex_toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% endif %}
{% set x = printer["gcode_macro PAUSE"].idex_toolhead_x|float %}
{% set y = printer["gcode_macro PAUSE"].idex_toolhead_y|float %}
{% set z = printer["gcode_macro PAUSE"].idex_toolhead_z|float %}
G1 X{x} Y{y} Z{z} F{speed}
{% if params.TOOLHEAD is defined %}
SAVE_GCODE_STATE NAME=PAUSE_STATE
{% endif %}
{% endif %}
{% if params.TOOLHEAD is not defined %}
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
{% if can_extrude %}
G91
G1 E{E} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 MOVE_SPEED={speed}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
RESUME_BASE
_LED_PRINTING
RATOS_ECHO MSG="Print resumed"
[gcode_macro CANCEL_PRINT]
description = Cancels the print
rename_existing = CANCEL_PRINT_BASE
gcode =
RATOS_ECHO MSG="Cancelling print..."
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
RATOS_ECHO MSG="Print cancelled"
[gcode_macro START_PRINT]
description = Start print procedure, use this in your Slicer.
variable_post_processor_version = 2
variable_is_printing_gcode = False
variable_both_toolheads = True
variable_object_xoffset = 0
variable_first_x = -1
variable_first_y = -1
variable_total_toolshifts = 0
variable_initial_tool = 0
variable_extruder_first_layer_temp = ""
variable_extruder_other_layer_temp = ""
gcode =
{% if params.EXTRUDER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_TEMP parameter not found.")}
{% endif %}
{% if params.EXTRUDER_OTHER_LAYER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_OTHER_LAYER_TEMP parameter not found.")}
{% endif %}
{% if params.BED_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. BED_TEMP parameter not found.")}
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' and printer["gcode_macro RatOS"].danger_force_allow_auto_center_subject|default(false)|lower != 'true'%}
{ action_raise_error("The experimental auto_center_subject feature is not supported in this version of RatOS. Please disable it in the RatOS macro settings.") }
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes and printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% if printer["gcode_macro _VAOC"].is_started|default(true)|lower == 'true' %}
_VAOC_END
{% endif %}
{% endif %}
_LED_START_PRINTING
CACHE_TOOLHEAD_SETTINGS KEY="start_print"
_USER_START_PRINT { rawparams }
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_probe_stowable = printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
{% set X0 = params.X0|default(-1)|float %}
{% set X1 = params.X1|default(-1)|float %}
{% set Y0 = params.Y0|default(-1)|float %}
{% set Y1 = params.Y1|default(-1)|float %}
{% if first_x == -1 or first_y == -1 %}
{% set first_x = params.FIRST_X|default(-1)|float %}
{% set first_y = params.FIRST_Y|default(-1)|float %}
{% endif %}
{% set total_toolshifts = params.TOTAL_TOOLSHIFTS|default(0)|int %}
{% set initial_tool = params.INITIAL_TOOL|default(default_toolhead)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set bed_temp = params.BED_TEMP|default(printer.heater_bed.target, true)|float %}
{% set total_layer_count = params.TOTAL_LAYER_COUNT|default(0)|int %}
{% set extruder_first_layer_temp = (params.EXTRUDER_TEMP|default("")).split(",") %}
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL BEACON_CONTACT_START_PRINT_TRUE_ZERO={beacon_contact_start_print_true_zero} BEACON_CONTACT_CALIBRATE_MODEL_ON_TRUE_ZERO={beacon_contact_calibrate_model_on_true_zero}
{% endif %}
_START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH BED_TEMP={bed_temp}
RATOS_ECHO MSG="First print coordinates X:{first_x} Y:{first_y}"
{% if params.TOTAL_LAYER_COUNT is not defined %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Configuration" %}
{% set line_1 = '"Your slicer gcode settings are not up to date._N_Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Incomplete Slicer Configuration detected" TYPE="warning" MSG={line_1}
{% endif %}
SET_PRINT_STATS_INFO CURRENT_LAYER=1
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE=1
{% if total_layer_count > 0 %}
SET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set swap_toolheads = true if printer["gcode_macro _IDEX_REMAP_TOOLHEADS"].enabled|default(false)|lower == 'true' else false %}
{% if swap_toolheads %}
{% set initial_tool = 0 if initial_tool == 1 else 1 %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=active VALUE=True
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=active VALUE=True
{% endif %}
{% set both_toolheads = true %}
{% if total_toolshifts == 0 %}
{% set both_toolheads = false %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
{% endif %}
{% if both_toolheads and (idex_mode == "copy" or idex_mode == "mirror") %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Gcode tool changes found. Copy and mirror mode do not support toolchanges.")}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set both_toolheads = true %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=initial_tool VALUE={initial_tool}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_x VALUE={first_x}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_y VALUE={first_y}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=total_toolshifts VALUE={total_toolshifts}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=both_toolheads VALUE={both_toolheads}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_first_layer_temp VALUE="'{params.EXTRUDER_TEMP}'"
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_other_layer_temp VALUE="'{params.EXTRUDER_OTHER_LAYER_TEMP}'"
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_TOOLCHANGE VARIABLE=toolshift_count VALUE=0
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set svv = printer.save_variables.variables %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
{% set stepper_x_position_min = printer.fastconfig.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.fastconfig.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.fastconfig.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.fastconfig.settings.dual_carriage.position_endstop|float %}
{% set x_parking_space = parking_position_t0 - (stepper_x_position_endstop , stepper_x_position_min)|max %}
{% set dc_parking_space = (dual_carriage_position_endstop , dual_carriage_position_max)|min - parking_position_t1 %}
{% if svv.idex_xoffset|abs >= (x_parking_space - 0.5) or svv.idex_xoffset|abs >= (dc_parking_space - 0.5) %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Toolhead x-offset is too high for the available parking space. Calibrate your X and DC endstop positions and make sure you stay below 1mm." % (copy_mode_max_width)) }
{% endif %}
{% endif %}
{% if (idex_mode == "copy" or idex_mode == "mirror") and printer.fastconfig.settings.ratos.enable_gcode_transform %}
{% if params.MIN_X is not defined or params.MAX_X is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Something went wrong! Missing important post processor start print parameter!") }
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE=0
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set boundary_box_min_x = params.MIN_X|default(0)|float %}
{% set boundary_box_max_x = params.MAX_X|default(printable_x_max)|float %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
{% set boundary_box_max_x = boundary_box_max_x + svv.idex_xoffset %}
{% else %}
{% set boundary_box_min_x = boundary_box_min_x - svv.idex_xoffset %}
{% endif %}
{% set center_x = printable_x_max / 2.0 %}
{% set safe_distance = printer.fastconfig.settings.dual_carriage.safe_distance|float %}
{% set object_width = boundary_box_max_x - boundary_box_min_x %}
{% set copy_mode_max_width = center_x %}
{% set mirror_mode_max_width = center_x - safe_distance / 2.0 %}
DEBUG_ECHO PREFIX="START_PRINT" MSG="OBJECT_WIDTH: {object_width} BOUNDARY_BOX_MIN_X: {boundary_box_min_x} BOUNDARY_BOX_MAX_X: {boundary_box_max_x} CENTER_X: {center_x} SAFE_DISTANCE: {safe_distance}"
{% if idex_mode == "copy" and object_width > copy_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for copy mode! Max supported width is %s mm" % (copy_mode_max_width)) }
{% endif %}
{% if idex_mode == "mirror" and object_width > mirror_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for mirror mode! Max supported width is %s mm" % (mirror_mode_max_width)) }
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = (printable_x_max - boundary_box_max_x - boundary_box_min_x) / 2 %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE={object_xoffset}
{% endif %}
{% endif %}
{% set has_initial_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_initial_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined and both_toolheads %}
{% set has_secondary_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_secondary_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% endif %}
_CHAMBER_FILTER_ON AT="before_print_start"
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true' %}
{% if both_toolheads %}
RATOS_ECHO MSG="Spool join is not possible if both toolheads are in use!"
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
CLEAR_PAUSE
{% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %}
G90
{% endif %}
SAVE_GCODE_STATE NAME=start_print_state
G21
G90
M82
_USER_START_PRINT_BEFORE_HOMING { rawparams }
{% if z_probe_stowable == true %}
STOWABLE_PROBE_BEGIN_BATCH
{% endif %}
MAYBE_HOME
_Z_HOP
{% if idex_mode != '' and not (printer.fastconfig.settings.beacon is defined and (beacon_contact_start_print_true_zero or beacon_adaptive_heat_soak)) %}
PARK_TOOLHEAD
{% endif %}
{% if chamber_temp > 0 %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED={printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float}
{% endif %}
{% endif %}
_CHAMBER_HEATER_ON START_CHAMBER_TEMP={start_chamber_temp} CHAMBER_TEMP={chamber_temp}
_USER_START_PRINT_HEAT_CHAMBER { rawparams } CHAMBER_TEMP={chamber_temp}
{% endif %}
_START_PRINT_BEFORE_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
RATOS_ECHO MSG="Heating bed..."
M190 S{bed_temp}
{% if printer.fastconfig.settings.beacon is defined and beacon_adaptive_heat_soak %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK LAYER_QUALITY={beacon_adaptive_heat_soak_layer_quality} MAXIMUM_FIRST_LAYER_DURATION={beacon_adaptive_heat_soak_maximum_first_layer_duration} MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={beacon_adaptive_heat_soak_max_wait}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_BED { rawparams }
_START_PRINT_AFTER_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
_USER_START_PRINT_BED_MESH { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_BED_MESH X0={X0} X1={X1} Y0={Y0} Y1={Y1} T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if z_probe_stowable == true %}
STOWABLE_PROBE_END_BATCH
{% endif %}
{% if idex_mode == '' %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[initial_tool]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[0]|float}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={extruder_first_layer_temp[1]|float}
{% endif %}
{% endif %}
_USER_START_PRINT_PARK { rawparams }
_START_PRINT_PARK
RATOS_ECHO MSG="Heating Extruder..."
{% if idex_mode == '' %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[initial_tool]|float} MAXIMUM={extruder_first_layer_temp[initial_tool]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder1" MINIMUM={extruder_first_layer_temp[1]|float} MAXIMUM={extruder_first_layer_temp[1]|float + 5}
{% endif %}
{% endif %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% if idex_mode == '' %}
_LED_PRINTING
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
_LED_PRINTING
{% else %}
{% if both_toolheads %}
_LED_PRINTING TOOLHEAD={initial_tool}
{% if toolchange_standby_temp > -1 %}
_LED_TOOLHEAD_STANDBY TOOLHEAD={0 if initial_tool == 1 else 1}
{% else %}
_LED_PRINTING TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% else %}
_LED_PRINTING TOOLHEAD={initial_tool}
_LED_DEACTIVATE_TOOLHEAD TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_EXTRUDER { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_AFTER_HEATING_EXTRUDER X0={X0} X1={X1} Y0={Y0} Y1={Y1} INITIAL_TOOLHEAD={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if idex_mode != '' %}
{% if not both_toolheads %}
{% if initial_tool != default_toolhead %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=standby VALUE=False
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=standby VALUE=False
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if toolchange_standby_temp > -1 %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if initial_tool == 1 else 'extruder1'} TARGET={toolchange_standby_temp}
SET_GCODE_VARIABLE MACRO=T{0 if initial_tool == 1 else 1} VARIABLE=standby VALUE=True
{% endif %}
{% endif %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if printer["dual_carriage"] is defined %}
_SET_IDEX_MODE_OFFSET
{% endif %}
{% if idex_mode != '' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% if idex_mode == "copy" and idex_mode != act_idex_mode %}
_IDEX_COPY DANCE=0
{% elif idex_mode == "mirror" and idex_mode != act_idex_mode %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
RATOS_ECHO MSG="Adjusting object x-offset by {(object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={object_xoffset} MOVE=0
{% endif %}
{% else %}
_SELECT_TOOL T={initial_tool} TOOLSHIFT=false
_SET_TOOLHEAD_OFFSET
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
_SET_EXTRUSION_MODE
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
SET_GCODE_VARIABLE MACRO=_SELECT_TOOL VARIABLE=last_timestamp VALUE={printer["print_stats"].print_duration}
{% endif %}
_USER_END_START_PRINT { rawparams }
G92 E0
_CHAMBER_FILTER_ON AT="after_print_start"
_ALERT_NON_ZERO_Z_OFFSET
RATOS_ECHO MSG="Printing..."
[gcode_macro _START_PRINT_BEFORE_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% set act_t = 1 if idex_mode == 'primary' else 0 %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set is_stowable_probe = true if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' else false %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Pre-heating extruder..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={min_temp}
{% else %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET={min_temp}
{% endif %}
{% else %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
{% endif %}
{% endif %}
{% if not is_stowable_probe %}
{% if printer["dual_carriage"] is defined and act_t != default_toolhead %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
{% endif %}
RATOS_ECHO MSG="Heat soaking z probe..."
_MOVE_TO_SAFE_Z_HOME
G0 Z2 F{z_speed}
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Waiting for extruder to be preheated..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
{% if default_toolhead == 0 %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_Z_HOP
{% endif %}
{% if auto_z_offset_calibration %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
PARK_TOOLHEAD
_CLEANING_MOVE TOOLHEAD={default_toolhead} AUTOMATED=True
_SELECT_TOOL T={0 if default_toolhead == 1 else 1} X={parking_position_t0 if default_toolhead == 1 else parking_position_t1} Y=0 TOOLSHIFT=false
_CLEANING_MOVE TOOLHEAD={0 if default_toolhead == 1 else 1} AUTOMATED=True
_VAOC_CALIBRATE_Z_OFFSET AUTO_Z_OFFSET=True
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=false
{% endif %}
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
{% if needs_rehoming %}
G28 Z
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% endif %}
{% endif %}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
PROBE PROBE_METHOD=contact SAMPLES=1
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% set fuzzy_radius = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_radius|default(0)|float if beacon_contact_start_print_true_zero_fuzzy_position else 0 %}
{% set contact_true_zero_temp_has_been_set = False %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
{% if printer.beacon.last_probe_result|lower == "ok" %}
{% set last_z_offset = printer.beacon.last_z_result %}
RATOS_ECHO MSG="Auto calibration nozzle wipe with probe result {last_z_offset}..."
G0 Z{(0.2 + last_z_offset)} F{z_speed}
G0 X70 F300
{% else %}
RATOS_ECHO MSG="Skipping auto calibration nozzle wipe because probing failed!"
{% endif %}
{% elif beacon_contact_wipe_before_true_zero_method == "probe_clean" %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% set contact_true_zero_temp_has_been_set = True %}
BEACON_PROBE_CLEAN X=50 Y=10
{% else %}
CONSOLE_ECHO TYPE="error" TITLE="Unknown wipe method" MSG="Unknown wipe method '{beacon_contact_wipe_before_true_zero_method}' configured, skipping wipe before beacon true zero."
{% endif %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME FUZZY_RADIUS={fuzzy_radius}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION
{% if not contact_true_zero_temp_has_been_set %}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% endif %}
RATOS_ECHO MSG="Beacon contact auto calibration..."
{% if beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
G0 Z5 F{z_speed}
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION]
gcode =
{% set pos = printer.ratos.last_move_to_safe_z_home_position %}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE={pos[0]}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE={pos[1]}
[gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set first_x = printer["gcode_macro START_PRINT"].first_x|default(-1)|float %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set center_x = printable_x_max / 2.0 %}
{% set center_y = printable_y_max / 2.0 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% if printer["dual_carriage"] is defined %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% endif %}
{% set X0 = params.X0|default(-1)|int %}
{% set X1 = params.X1|default(-1)|int %}
{% set Y0 = params.Y0|default(-1)|int %}
{% set Y1 = params.Y1|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% if idex_mode == '' %}
_PRIME
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
RATOS_ECHO PREFIX="IDEX" MSG="using combined prime offset for IDEX {idex_mode} mode"
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
{% if both_toolheads %}
{% if initial_toolhead == 0 %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T{initial_toolhead}"
_SELECT_TOOL T={initial_toolhead} TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% endif %}
{% endif %}
CACHE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
SET_MACRO_TRAVEL_SETTINGS
{% if (X0 > -1 and Y1 > -1) or (first_x > 0 and first_y > 0) %}
{% if printer["dual_carriage"] is defined %}
{% set acceleration = printer["gcode_macro RatOS"].toolchange_travel_accel %}
{% set max_accel = printer.toolhead.max_accel|float %}
{% set square_corner_velocity = printer.toolhead.square_corner_velocity|float %}
SET_VELOCITY_LIMIT ACCEL={acceleration} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY=20
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
{% set first_z = 1 %}
{% else %}
{% set first_z = 3 %}
{% endif %}
{% if idex_mode == "mirror" %}
{% if first_y >= 0 %}
G0 Y{first_y} F{speed}
{% else %}
G0 Y{Y1} F{speed}
{% endif %}
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
_MOVE_TO_LOADING_POSITION TOOLHEAD={initial_toolhead} AUTOMATED=True
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead} AUTOMATED=True
{% endif %}
{% if first_x >= 0 and first_y >= 0 %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% else %}
{% set first_x = X0 %}
{% set first_y = Y0 %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %}
{% set first_x = X0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %}
{% set first_x = X1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|float <= center_x %}
{% set first_x = X0 %}
{% else %}
{% set first_x = X1 %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %}
{% set first_y = Y0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %}
{% set first_y = Y1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float <= center_y %}
{% set first_y = Y0 %}
{% else %}
{% set first_y = Y1 %}
{% endif %}
{% endif %}
{% endif %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% endif %}
{% endif %}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
_LOAD_RATOS_SKEW_PROFILE
[gcode_macro _PRIME]
gcode =
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
PRIME_BLOB INITIAL_TOOLHEAD={params.INITIAL_TOOLHEAD} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={params.IDEX_MODE} Y1={params.Y1}
{% else %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE == "copy" %}
_IDEX_COPY DANCE=0
{% elif params.IDEX_MODE == "mirror" %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro END_PRINT]
description = End print procedure, use this in your Slicer.
gcode =
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SAVE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = printer["gcode_macro START_PRINT"].object_xoffset|default(0)|float %}
RATOS_ECHO MSG="Adjusting object x-offset by {(0-object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={(0-object_xoffset)}
{% endif %}
{% endif %}
_USER_END_PRINT_BEFORE_HEATERS_OFF { rawparams }
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_USER_END_PRINT_AFTER_HEATERS_OFF { rawparams }
_END_PRINT_AFTER_HEATERS_OFF
_USER_END_PRINT_PARK { rawparams }
_END_PRINT_PARK
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
{% if printer["dual_carriage"] is not defined and printer["gcode_macro RatOS"].end_print_motors_off|lower != 'false' %}
M84
{% endif %}
M107
BED_MESH_CLEAR
RATOS_ECHO MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
M84
{% endif %}
RESET_NAMED_OFFSET EVENT="end_print"
RESTORE_TOOLHEAD_SETTINGS KEY="start_print"
_CHAMBER_FILTER_ON AT="print_end"
_CHAMBER_FILTER_OFF
_CHAMBER_HEATER_OFF
_USER_END_PRINT_FINISHED { rawparams }
[gcode_macro _END_PRINT_BEFORE_HEATERS_OFF]
gcode =
RATOS_ECHO MSG="Cleaning up..."
[gcode_macro _END_PRINT_AFTER_HEATERS_OFF]
gcode =
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %}
{% set r = printer["gcode_macro RatOS"].end_print_retract_filament|default(4)|float %}
{% if current_z < (max_z - z_hop) %}
{% set z_safe = z_hop %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
G91
{% if can_extrude %}
G1 E-2 F3600
{% endif %}
G0 Z{z_safe} F3600
{% if can_extrude %}
G1 E-{(r-2)} F3600
{% endif %}
G90
[gcode_macro _SET_EXTRUSION_MODE]
gcode =
{% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %}
M83
{% else %}
M82
{% endif %}
[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 =
CACHE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set axis = params.AXIS|default('')|lower %}
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
{% if axis != '' %}
{% if axis == 'x' %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
{% elif axis == 'y' %}
MAYBE_HOME
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% else %}
{action_raise_error("Unknown axis specified. Expected X or Y.")}
{% endif %}
{% else %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% endif %}
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Shaper graph"
[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_macro MEASURE_COREXY_BELT_TENSION]
description = Generates resonance graph used to ensure belts are equally tensioned.
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
MAYBE_HOME
TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_belt_tension_graph
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Belt Tension Graph"
[gcode_shell_command generate_belt_tension_graph]
command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh
timeout = 90.
verbose = True
[idle_timeout]
gcode =
{% if printer.webhooks.state|lower == 'ready' %}
{% if printer.pause_resume.is_paused|lower == 'false' %}
_USER_BEFORE_IDLE_TIMEOUT
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
_USER_AFTER_IDLE_TIMEOUT
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[named_offsets]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[bed_mesh]
split_delta_z = 0.01
speed = 300
horizontal_move_z = 10
mesh_min = 20,30
mesh_max = 310,310
fade_start = 0.6
fade_end = 10.0
probe_count = 5,5
algorithm = bicubic
log_points = False
[fastconfig]
[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.103
control = pid
pid_kp = 42.817
pid_ki = 1.353
pid_kd = 338.788
[fan]
pin = !PA8
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PB4
fan_speed = 1
heater = extruder
shutdown_speed = 1
[controller_fan controller_fan]
pin = PD12
[printer]
kinematics = corexy
max_velocity = 300
max_accel = 3000
max_z_velocity = 20
max_z_accel = 350
square_corner_velocity = 5
minimum_cruise_ratio = 0.5
[gcode_macro QUAD_GANTRY_LEVEL]
rename_existing = QUAD_GANTRY_LEVEL_ORIG
gcode =
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
QUAD_GANTRY_LEVEL_ORIG
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 330
position_endstop = 330
step_pin = PF13
dir_pin = !x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PA2
position_min = 0
[stepper_y]
position_max = 350
position_endstop = 350
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
position_min = 0
[stepper_z]
position_max = 310
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
position_min = -5
homing_speed = 10
gear_ratio = 80:16
endstop_pin = probe:z_virtual_endstop
[quad_gantry_level]
gantry_corners =
-60,-10
410,420
points =
50,25
50,275
300,275
300,25
speed = 300
horizontal_move_z = 10
retries = 5
retry_tolerance = 0.0075
max_adjust = 10
[gcode_macro G32]
gcode =
SAVE_GCODE_STATE NAME=STATE_G32
G90
G28
QUAD_GANTRY_LEVEL
G28
G0 X175 Y175 Z30 F3600
RESTORE_GCODE_STATE NAME=STATE_G32
[extruder]
rotation_distance = 8
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB0
sensor_type = Generic 3950
sensor_pin = toolboard_t0:PA1
min_extrude_temp = 170
min_temp = 0
max_temp = 285
pressure_advance = 0.03
step_pin = toolboard_t0:PD3
dir_pin = !toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PB6
microsteps = 64
full_steps_per_rotation = 200
control = pid
pid_kp = 22.176
pid_ki = 2.843
pid_kd = 43.244
[firmware_retraction]
retract_speed = 40
unretract_extra_length = 0
unretract_speed = 40
retract_length = 0.5
[resonance_tester]
accel_chip_x = beacon
accel_chip_y = beacon
probe_points =
175,175,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 0.8
sense_resistor = 0.11
[stepper_z1]
step_pin = PE2
dir_pin = !z1_dir_pin
enable_pin = !PD4
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 0.8
sense_resistor = 0.11
[stepper_z2]
step_pin = PE6
dir_pin = !z2_dir_pin
enable_pin = !PE0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z3]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 0.8
sense_resistor = 0.11
[stepper_z3]
step_pin = PF9
dir_pin = !z3_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PB3
run_current = 0.707
driver_tbl = 0
driver_toff = 4
driver_hend = 6
driver_hstrt = 7
sense_resistor = 0.11
[beacon]
serial = /dev/beacon
x_offset = 0
y_offset = 22.5
mesh_main_direction = x
mesh_runs = 1
mesh_cluster_size = 0
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[beacon_user_z_offset]
[beacon_mesh]
[beacon_true_zero_correction]
[beacon_adaptive_heat_soak]
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
ENSURE_CRITICAL_RATOS_INIT
_BEACON_MESH_INIT
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_applied_offset
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=beacon_saved_runtime_offset
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_contact_expansion_multiplier is no longer used, please remove it from your config file."
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_scan_compensation_resolution is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_scan_compensation_resolution is no longer used, please remove it from your config file."
{% endif %}
[gcode_macro BEACON_RATOS_CALIBRATION]
gcode =
RATOS_ECHO MSG="Did you mean BEACON_RATOS_CALIBRATE?"
[gcode_macro BEACON_RATOS_CALIBRATE]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
BEACON_INITIAL_CALIBRATION _AUTOMATED=True
{% if beacon_contact_start_print_true_zero %}
BEACON_POKE_TEST _AUTOMATED=True
_BEACON_CHECK_POKE
{% if printer["dual_carriage"] is not defined %}
BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET _AUTOMATED=True
{% endif %}
{% endif %}
{% set already_heated = False %}
{% if beacon_contact_start_print_true_zero and beacon_scan_compensation_enable %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% set already_heated = True %}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True _AUTOMATED_ALREADY_HEATED={already_heated} BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if beacon_contact_start_print_true_zero %}
{% if printer["dual_carriage"] is not defined %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
_BEACON_ECHO_POKE
{% endif %}
RATOS_ECHO MSG="Beacon calibration finished!"
_LED_BEACON_CALIBRATION_END
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
[gcode_macro BEACON_INITIAL_CALIBRATION]
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
_Z_HOP
RATOS_ECHO MSG="Initial beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro BEACON_FINAL_CALIBRATION]
description = Runs BEACON_AUTO_CALIBRATE after heating the bed and chamber to specified temperatures. This creates a beacon model under reference conditions for future use.
This macro will skip calibration if both the beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero settings are enabled, because a new
model will be calibrated automatically at the start of each print. Use FORCE=True to override this check.
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set already_heated = true if params._AUTOMATED_ALREADY_HEATED|default(false)|lower == 'true' else false %}
{% set force = params.FORCE|default('false')|lower in ('1', 'true', 'yes') %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default('false')|lower == "true" %}
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero and not force %}
RATOS_ECHO MSG="BEACON_FINAL_CALIBRATION skipped, not needed because beacon_contact_calibrate_model_on_true_zero is enabled. Use FORCE=True to override."
{% else %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not already_heated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
{% if not already_heated %}
G0 Z2.5 F{z_hop_speed}
RATOS_ECHO MSG="Waiting for calibration temperature..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,3600]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% endif %}
_Z_HOP
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
_Z_HOP
RATOS_ECHO MSG="Final beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro BEACON_POKE_TEST]
variable_poke_result_1 = -1
variable_poke_result_2 = -1
variable_poke_result_3 = -1
variable_poke_result_4 = -1
variable_poke_result_5 = -1
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_1 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_2 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_3 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_4 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_5 VALUE=-1
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
G0 Z5 F{z_hop_speed}
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=1
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=2
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=3
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=4
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=5
_Z_HOP
RATOS_ECHO MSG="Beacon poke test finished!"
{% if not automated %}
_BEACON_ECHO_POKE
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_POKE]
gcode =
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
BEACON_POKE speed=3 top=5 bottom={poke_bottom}
BEACON_QUERY
[gcode_macro _BEACON_STORE_POKE]
gcode =
{% set i = params.I|default(1)|int %}
{% set last_z = printer.beacon.last_poke_result|default(0)|float %}
{% if printer.beacon.last_poke_result|lower != "none" %}
{% if printer.beacon.last_poke_result.error == 0 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE={"poke_result_%s" % i} VALUE={printer.beacon.last_poke_result.latency}
{% endif %}
{% endif %}
[gcode_macro _BEACON_CHECK_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% if p1 == -1 or p2 == -1 or p3 == -1 or p4 == -1 or p5 == -1 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test error!") }
{% endif %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg > 6 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test failed!") }
{% endif %}
[gcode_macro _BEACON_ECHO_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg <= 1 %}
{% set type = "success" %}
{% set note = "Extremely low noise, rarely achieved" %}
{% elif avg > 1 and avg <= 4 %}
{% set type = "info" %}
{% set note = "Excellent performance for a typical printer" %}
{% elif avg > 4 and avg <= 8 %}
{% set type = "warning" %}
{% set note = "Acceptable performance, machine may have considerable cyclic axis noise" %}
{% elif avg > 8 and avg <= 11 %}
{% set type = "alert" %}
{% set note = "Not ideal, may want to verify proper mounting or use thinner stackups" %}
{% elif avg > 11 %}
{% set type = "alert" %}
{% set note = "Reason for concern, present setup may be risky to continue with" %}
{% endif %}
CONSOLE_ECHO TITLE="Beacon poke test result:" TYPE={type} MSG={'"Average latency: %.2f_N_%s"' % (avg, note)}
[gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET]
variable_reference_z = 0.0
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Nozzle temperature offset calibration..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET=0
{% if not automated %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set svv = printer.save_variables.variables %}
RATOS_ECHO PREFIX="BEACON" MSG="Waiting for nozzle to reach {temp}°C..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={temp} MAXIMUM={temp + 2}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
RATOS_ECHO PREFIX="BEACON" MSG="Probing with nozzle temperature {temp}°C..."
PROBE PROBE_METHOD=contact PROBE_SPEED=3 LIFT_SPEED=15 SAMPLES=5 SAMPLE_RETRACT_DIST=3 SAMPLES_TOLERANCE=0.005 SAMPLES_TOLERANCE_RETRIES=10 SAMPLES_RESULT=median
BEACON_QUERY
G0 Z5 F{z_speed}
[gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% set last_z = printer.beacon.last_z_result|default(0)|float %}
{% if temp == 150 %}
SET_GCODE_VARIABLE MACRO=BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET"].reference_z|default(0)|float %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_t{default_toolhead} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS]
gcode =
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
CONSOLE_ECHO TYPE="info" MSG={'"T0 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t0}
{% else %}
CONSOLE_ECHO TYPE="info" MSG={'"T1 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t1}
{% endif %}
[gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET]
description = "Set the thermal expansion z offset for the active toolhead based on the current extruder target temperature and thermal expansion coefficient."
gcode =
{% if params.RESET is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The RESET parameter is no longer supported and has no effect."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% if params.TOOLHEAD is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The TOOLHEAD parameter is no longer supported and has no effect. The macro now automatically determines the current toolhead."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% set beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_expansion_compensation %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set toolhead = default_toolhead %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if current_idex_mode=='primary' else default_toolhead %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_t0 = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if printer["dual_carriage"] is defined %}
{% set nozzle_expansion_coefficient_t1 = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_delta = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = temp_delta * (expansion_coefficient / 100) %}
SET_NAMED_OFFSET NAME=hotend_thermal_expansion Z={expansion_offset} MOVE=1 MOVE_SPEED={z_speed}
RATOS_ECHO PREFIX="BEACON" MSG={'"Nozzle expansion offset of %.6fmm applied to T%s"' % (expansion_offset, toolhead)}
DEBUG_ECHO PREFIX="_BEACON_SET_NOZZLE_TEMP_OFFSET" MSG="toolhead: {toolhead}, coefficient: {expansion_coefficient|round(6)}, temp_delta: {temp_delta|round(1)}, expansion_offset: {expansion_offset|round(6)}"
{% endif %}
[gcode_macro BEACON_MEASURE_BEACON_OFFSET]
variable_needs_compensation = False
variable_reference_z = 0.0
variable_front = 0.0
variable_front_left = 0.0
variable_front_right = 0.0
variable_back = 0.0
variable_back_left = 0.0
variable_back_right = 0.0
variable_right = 0.0
variable_left = 0.0
variable_margin_x = 40
variable_margin_y = 40
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure beacon offset..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_BEACON_OFFSET
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_STORE_BEACON_OFFSET]
gcode =
{% set location = params.LOCATION|lower %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_BEACON_OFFSET]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].left|default(0)|float * 1000 %}
{% set line_1 = "Front left: %.6fμm" % (front_left) %}
{% set line_2 = "Front center: %.6fμm" % (front) %}
{% set line_3 = "Front right: %.6fμm" % (front_right) %}
{% set line_4 = "Left center: %.6fμm" % (left) %}
{% set line_5 = "Right center: %.6fμm" % (right) %}
{% set line_6 = "Back left: %.6fμm" % (back_left) %}
{% set line_7 = "Back center: %.6fμm" % (back) %}
{% set line_8 = "Back right: %.6fμm" % (back_right) %}
{% set max_value = [(front_left|abs), (front|abs), (front_right|abs), (left|abs), (right|abs), (back_left|abs), (back|abs), (back_right|abs)]|max %}
{% if max_value <= 50 %}
{% set type = "success" %}
{% set recommendation = "Very low beacon offset: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low beacon offset: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High beacon offset: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High beacon offset: %.6fμm._N_You will encounter first layer problems on large prints unless you activate beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high beacon offset: %.6fμm._N_You have significant scan/contact inconsistency which is indicative of mechanical problems, please investigate before resorting to software compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Beacon offset relative to the center" TYPE={type} MSG={'"_N_%s_N__N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s"' % (recommendation, line_1, line_2, line_3, line_4, line_5, line_6, line_7, line_8)}
[gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set profile = params.PROFILE|default("auto")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set keep_temp_meshes = params.KEEP_TEMP_MESHES|default(0) %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' %}
{% set desired_spacing = printer["gcode_macro RatOS"].beacon_scan_compensation_desired_spacing|float %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
RATOS_ECHO MSG="Please wait..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,9000]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if not (beacon_adaptive_heat_soak or bed_heat_soak_time > 0) %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if printer.z_tilt is defined %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% endif %}
{% if printer.quad_gantry_level is defined %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% endif %}
_BEACON_CREATE_SCAN_COMPENSATION_MESH_CORE PROFILE="{profile}" DESIRED_SPACING={desired_spacing} CHAMBER_TEMP={chamber_temp} KEEP_TEMP_MESHES={keep_temp_meshes}
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if automated %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
RATOS_ECHO MSG="Beacon scan compensation mesh created!"
{% if not automated %}
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
{% endif %}
{% endif %}
[gcode_macro _BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED" MSG="beacon_scan_compensation_profile {beacon_scan_compensation_profile}, beacon_scan_compensation_enable {beacon_scan_compensation_enable}"
{% if beacon_scan_compensation_enable %}
BEACON_APPLY_SCAN_COMPENSATION PROFILE="{beacon_scan_compensation_profile}"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL]
gcode =
{% set beacon_contact_start_print_true_zero = params.BEACON_CONTACT_START_PRINT_TRUE_ZERO|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = params.beacon_contact_calibrate_model_on_true_zero|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and not printer.beacon.model %}
{% set beacon_model_required_for_true_zero = beacon_contact_start_print_true_zero and not beacon_contact_calibrate_model_on_true_zero %}
{% set beacon_model_required_for_homing =
printer.fastconfig.settings.stepper_z.endstop_pin == 'probe:z_virtual_endstop'
and (( printer.fastconfig.settings.beacon.home_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower != 'true')
or ( printer.fastconfig.settings.beacon.default_probe_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower != 'true' )) %}
{% if beacon_model_required_for_homing or beacon_model_required_for_true_zero %}
_LED_START_PRINTING_ERROR
{ action_raise_error("An active Beacon model is required. Have you performed initial Beacon calibration?") }
{% endif %}
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set bed_temp_mismatch_is_error = true if printer["gcode_macro RatOS"].beacon_scan_compensation_bed_temp_mismatch_is_error|default(false)|lower == 'true' else false %}
{% set bed_temp = params.BED_TEMP|default(0)|float %}
{% if bed_temp == 0 %}
{% set bed_temp = printer.heater_bed.temperature %}
{% endif %}
DEBUG_ECHO PREFIX="_START_PRINT_PREFLIGHT_CHECK_BEACON" MSG="beacon_scan_compensation_profile={beacon_scan_compensation_profile}, beacon_scan_compensation_enable={beacon_scan_compensation_enable}, bed_temp={bed_temp}"
{% if beacon_scan_compensation_enable %}
_VALIDATE_COMPENSATION_MESH_PROFILE PROFILE="{beacon_scan_compensation_profile}" TITLE="Check Beacon scan compensation profile" SUBJECT="Configured compensation profile '{beacon_scan_compensation_profile}'" COMPARE_BED_TEMP={bed_temp} COMPARE_BED_TEMP_IS_ERROR={bed_temp_mismatch_is_error}
{% endif %}
[gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set needs_scan_compensation = true if printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].needs_compensation|default(false)|lower == 'true' else false %}
{% if needs_scan_compensation %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% endif %}
[gcode_macro _BEACON_HOME_AND_ABL]
gcode =
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% if needs_rehoming %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
[gcode_macro SAVE_Z_OFFSET]
description = Deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead, or in Mainsail use the SAVE button in the Z-OFFSET section.
gcode =
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default('false')|lower == 'true' %}
{% set msg = "SAVE_Z_OFFSET is deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead,_N_or in Mainsail use the SAVE button in the Z-OFFSET section."%}
{% if not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% set msg = msg + "_N_You must then use the SAVE_CONFIG command to persist the change." %}
{% endif %}
CONSOLE_ECHO TYPE="error" MSG="{msg}"
[gcode_macro _BEACON_OFFSET_COMPARE]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE SAMPLES_DROP=1 SAMPLES=3
BEACON_QUERY
[gcode_macro T0]
variable_join = 0
variable_remap = 0
variable_alert = ""
variable_filament_name = ""
variable_filament_type = ""
variable_filament_temp = 0
variable_runout_sensor = ""
variable_active = True
variable_color = "7bff33"
variable_hotend_type = "HF"
variable_has_cht_nozzle = False
variable_cooling_position_to_nozzle_distance = 40
variable_tooolhead_sensor_to_extruder_gear_distance = 15
variable_extruder_gear_to_cooling_position_distance = 30
variable_filament_loading_nozzle_offset = -5
variable_filament_grabbing_length = 5
variable_filament_grabbing_speed = 1
variable_enable_insert_detection = True
variable_enable_runout_detection = True
variable_enable_clog_detection = True
variable_unload_after_runout = True
variable_purge_after_load = 0
variable_purge_before_unload = 0
variable_extruder_load_speed = 60
variable_filament_load_speed = 10
variable_standby = False
variable_temperature_offset = 0
variable_has_oozeguard = False
variable_has_front_arm_nozzle_wiper = False
variable_toolhead_sensor_button_only_when_sensor_enabled = False
variable_toolhead_detect_clog_only_when_sensor_enabled = True
variable_resume_after_insert = False
gcode =
{% set x = params.X|default(-1.0)|float %}
{% set y = params.Y|default(-1.0)|float %}
{% set z = params.Z|default(0.0)|float %}
{% set s = params.S|default(1)|int %}
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
_SELECT_TOOL T=0 X={x} Y={y} Z={z} TOOLSHIFT={s}
{% endif %}
[save_variables]
filename = /home/pi/printer_data/config/ratos-variables.cfg
=======================
Extruder max_extrude_ratio=0.266081
mcu 'mcu': Starting serial connect
webhooks client 3932466264: New connection
webhooks client 3932466264: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c3_PA8_PC9=PA8,PC9 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_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 BUS_PINS_spi5=PF8,PF9,PF7 BUS_PINS_spi5a=PH7,PF11,PH6 BUS_PINS_spi6=PG12,PG14,PG13 CLOCK_FREQ=400000000 MCU=stm32h723xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu 'rpi': Starting connect
mcu 'rpi': got {'count': 139, 'sum': 133746, 'sumsq': 667096, '#name': 'stats', '#sent_time': 2449.016089947, '#receive_time': 2449.017391077}
Loaded MCU 'rpi' 119 commands (?-20240727_132503-fv-az659-741 / gcc: (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110 binutils: (GNU Binutils for Raspbian) 2.35.2)
MCU 'rpi' config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256
mcu 'toolboard_t0': Starting serial connect
Loaded MCU 'toolboard_t0' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'toolboard_t0' config: ADC_MAX=4095 BUS_PINS_i2c1_PA9_PA10=PA9,PA10 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c2_PB13_PB14=PB13,PB14 BUS_PINS_i2c3_PB3_PB4=PB3,PB4 BUS_PINS_i2c3_PC0_PC1=PC0,PC1 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2_PB2_PB11_PB10=PB2,PB11,PB10 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=64000000 MCU=stm32g0b1xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PF0,PF1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu_temperature 'mcu' nominal base=-274.761905 slope=1625.000000
mcu_temperature 'toolboard_t0' nominal base=-273.206997 slope=1313.265306
mcu 'beacon': Starting serial connect
Loaded MCU 'beacon' 45 commands (Beacon 2.1.0 / )
MCU 'beacon' config: ADC_MAX=4095 BEACON_ACCEL_BITS=12 BEACON_ACCEL_SCALE_16G=7.81 BEACON_ACCEL_SCALE_2G=0.98 BEACON_ACCEL_SCALE_4G=1.95 BEACON_ACCEL_SCALE_8G=3.91 BEACON_ADC_SMOOTH_COUNT=16 BEACON_HAS_ACCEL=1 BEACON_REV=H CLOCK_FREQ=32000000 MCU=beacon STATS_SUMSQ_BASE=256
Sending MCU 'mcu' printer configuration...
Configured MCU 'mcu' (1024 moves)
Sending MCU 'rpi' printer configuration...
Configured MCU 'rpi' (1024 moves)
Sending MCU 'toolboard_t0' printer configuration...
Configured MCU 'toolboard_t0' (1024 moves)
Starting heater checks for heater_bed
beacon: loaded fnorm=5097771.25 temp=19.76 amfg=0.960 from nvm
beacon: built tempco model version 1 {'amfg': 0.9600737096063234, 'tcc': -6.477678986652925e-06, 'tcfl': -0.0006437466059114605, 'tctl': 0.0019760718274445636, 'fmin': 5097771.253436804, 'fmin_temp': 19.758686065673828}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
beacon_user_z_offset: beacon_contact_start_print_true_zero is enabled, activating beacon user z-offset management. Applying configured z_offset of 0.0 mm to named offset 'user_probe_z_offset'.
Starting heater checks for extruder
Stats 2451.3: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3490 bytes_read=7227 bytes_retransmit=9 bytes_invalid=0 send_seq=290 receive_seq=290 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400013880 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=846 bytes_read=4682 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998885 adj=49990991 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1426 bytes_read=4984 bytes_retransmit=9 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000589 adj=64000549 Octopus_Pro_H723_V1.1: temp=0.0 EBB42_Gen2_v1.0: temp=0.0 raspberry_pi: temp=60.4 heater_bed: target=0 temp=0.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=360 bytes_read=1999 bytes_retransmit=0 bytes_invalid=0 send_seq=60 receive_seq=60 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32001529 adj=32000478 coil_temp=0.0 refs=0 sysload=0.10 cputime=79.765 memavail=3313492 print_time=8.275 buffer_time=0.249 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000
Initializing RatOS...
CALCULATE_PRINTABLE_AREA: Printable area calculated: X: 0,330.0 Y: 0,350.0
webhooks: registering remote method 'shutdown_machine' for connection id: 3932466264
webhooks: registering remote method 'reboot_machine' for connection id: 3932466264
webhooks: registering remote method 'pause_job_queue' for connection id: 3932466264
webhooks: registering remote method 'start_job_queue' for connection id: 3932466264
Stats 2452.3: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3496 bytes_read=7330 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015664 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=852 bytes_read=4698 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999131 adj=50001465 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1432 bytes_read=5116 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000444 adj=63997398 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=60.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=366 bytes_read=2355 bytes_retransmit=0 bytes_invalid=0 send_seq=61 receive_seq=61 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000415 adj=32000425 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.09 cputime=79.835 memavail=3307464 print_time=8.275 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
ratos: beacon probing regions updated: BeaconProbingRegions(x_offset=0.0, y_offset=22.5, printable_x_max=330.0, printable_y_max=350.0, mesh_proximity_min_coil_pos=(20.0, 30.0), mesh_proximity_max_coil_pos=(310.0, 310.0), mesh_proximity_min_toolhead_pos=(20.0, 7.5), mesh_proximity_max_toolhead_pos=(310.0, 287.5), mesh_contact_min=(20.0, 30.0), mesh_contact_max=(310.0, 287.5), logical_proximity_min_coil_pos=(20.0, 20.0), logical_proximity_max_coil_pos=(310.0, 330.0), logical_proximity_min_toolhead_pos=(20.0, -2.5), logical_proximity_max_toolhead_pos=(310.0, 307.5), logical_contact_min=(10.0, -12.5), logical_contact_max=(320.0, 317.5))
HELLO_RATOS: version: v2.1.0-RC4-5-g9b7d2ad3, distro: RatOS v2.1.0-RC4 (bullseye)
No deferred RatOS console messages to write.
ratos: Current CPU governor(s): performance
Stats 2453.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3508 bytes_read=7520 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016034 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=858 bytes_read=4714 bytes_retransmit=0 bytes_invalid=0 send_seq=117 receive_seq=117 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999249 adj=50000670 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1438 bytes_read=5292 bytes_retransmit=9 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000441 adj=63996778 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=60.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=2913 bytes_retransmit=0 bytes_invalid=0 send_seq=63 receive_seq=63 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000274 adj=31998430 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.09 cputime=79.982 memavail=3306496 print_time=8.275 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 2454.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3514 bytes_read=7648 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015729 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=864 bytes_read=4743 bytes_retransmit=0 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999324 adj=49999493 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1450 bytes_read=5411 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000392 adj=63997075 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=3269 bytes_retransmit=0 bytes_invalid=0 send_seq=64 receive_seq=64 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000235 adj=31998370 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.09 cputime=80.010 memavail=3312920 print_time=8.275 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2455.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3520 bytes_read=7751 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015657 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=870 bytes_read=4759 bytes_retransmit=0 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999338 adj=49999211 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1456 bytes_read=5514 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000325 adj=63997292 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=3625 bytes_retransmit=0 bytes_invalid=0 send_seq=65 receive_seq=65 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000147 adj=31998504 coil_temp=22.0 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.09 cputime=80.035 memavail=3312920 print_time=8.275 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2456.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3526 bytes_read=7854 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015777 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=876 bytes_read=4775 bytes_retransmit=0 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999315 adj=49998809 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1462 bytes_read=5646 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000290 adj=63997301 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=3981 bytes_retransmit=0 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000139 adj=31998428 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.09 cputime=80.060 memavail=3312920 print_time=8.275 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2457.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3532 bytes_read=7986 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015712 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=882 bytes_read=4791 bytes_retransmit=0 bytes_invalid=0 send_seq=121 receive_seq=121 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999385 adj=49998389 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1468 bytes_read=5749 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000293 adj=63997277 Octopus_Pro_H723_V1.1: temp=34.9 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=60.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=4337 bytes_retransmit=0 bytes_invalid=0 send_seq=67 receive_seq=67 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000134 adj=31998495 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.09 cputime=80.085 memavail=3310768 print_time=8.275 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2458.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3538 bytes_read=8103 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015641 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=888 bytes_read=4807 bytes_retransmit=0 bytes_invalid=0 send_seq=122 receive_seq=122 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999413 adj=49998376 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1474 bytes_read=5866 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000278 adj=63997442 Octopus_Pro_H723_V1.1: temp=34.9 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=4693 bytes_retransmit=0 bytes_invalid=0 send_seq=68 receive_seq=68 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000134 adj=31998594 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.09 cputime=80.110 memavail=3310772 print_time=8.275 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2459.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=5488 bytes_read=9870 bytes_retransmit=9 bytes_invalid=0 send_seq=395 receive_seq=395 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015582 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=894 bytes_read=4836 bytes_retransmit=0 bytes_invalid=0 send_seq=123 receive_seq=123 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999453 adj=49998260 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1480 bytes_read=5998 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000276 adj=63997517 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=5049 bytes_retransmit=0 bytes_invalid=0 send_seq=69 receive_seq=69 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000187 adj=31998684 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.09 cputime=80.219 memavail=3310772 print_time=16.963 buffer_time=0.410 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2460.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=7411 bytes_read=11257 bytes_retransmit=9 bytes_invalid=0 send_seq=477 receive_seq=477 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016119 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=900 bytes_read=4852 bytes_retransmit=0 bytes_invalid=0 send_seq=124 receive_seq=124 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999486 adj=49998155 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1486 bytes_read=6101 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000270 adj=63997638 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=5405 bytes_retransmit=0 bytes_invalid=0 send_seq=70 receive_seq=70 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000220 adj=31998954 coil_temp=21.9 refs=0 mcu_temp=24.64 supply_voltage=2.995 sysload=0.09 cputime=80.303 memavail=3310920 print_time=17.851 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Endstop y still triggered after retract
Endstop y still triggered after retract
Endstop y still triggered after retract
Stats 2461.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=7714 bytes_read=11546 bytes_retransmit=9 bytes_invalid=0 send_seq=492 receive_seq=492 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016020 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=906 bytes_read=4868 bytes_retransmit=0 bytes_invalid=0 send_seq=125 receive_seq=125 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999475 adj=49997872 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1492 bytes_read=6204 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000279 adj=63997308 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=5761 bytes_retransmit=0 bytes_invalid=0 send_seq=71 receive_seq=71 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000197 adj=31998899 coil_temp=21.9 refs=0 mcu_temp=24.64 supply_voltage=2.994 sysload=0.09 cputime=80.341 memavail=3297788 print_time=18.451 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2462.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=7720 bytes_read=11649 bytes_retransmit=9 bytes_invalid=0 send_seq=493 receive_seq=493 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015948 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=912 bytes_read=4884 bytes_retransmit=0 bytes_invalid=0 send_seq=126 receive_seq=126 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999482 adj=49997808 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1498 bytes_read=6336 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000280 adj=63997475 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=6117 bytes_retransmit=0 bytes_invalid=0 send_seq=72 receive_seq=72 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000172 adj=31998852 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.994 sysload=0.08 cputime=80.368 memavail=3301136 print_time=18.451 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 2463.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=7726 bytes_read=11796 bytes_retransmit=9 bytes_invalid=0 send_seq=494 receive_seq=494 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015860 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000011 bytes_write=918 bytes_read=4900 bytes_retransmit=0 bytes_invalid=0 send_seq=127 receive_seq=127 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999482 adj=49997794 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1504 bytes_read=6453 bytes_retransmit=9 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000280 adj=63997586 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.7 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=6457 bytes_retransmit=0 bytes_invalid=0 send_seq=73 receive_seq=73 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000159 adj=31998792 coil_temp=22.0 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.08 cputime=80.394 memavail=3301136 print_time=18.451 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2464.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=7732 bytes_read=11894 bytes_retransmit=9 bytes_invalid=0 send_seq=495 receive_seq=495 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015859 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=924 bytes_read=4929 bytes_retransmit=0 bytes_invalid=0 send_seq=128 receive_seq=128 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999485 adj=49997766 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1510 bytes_read=6556 bytes_retransmit=9 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000285 adj=63997686 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=58.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=6813 bytes_retransmit=0 bytes_invalid=0 send_seq=74 receive_seq=74 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000146 adj=31998805 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.08 cputime=80.420 memavail=3308092 print_time=18.451 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2465.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=7738 bytes_read=11997 bytes_retransmit=9 bytes_invalid=0 send_seq=496 receive_seq=496 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016108 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=930 bytes_read=4945 bytes_retransmit=0 bytes_invalid=0 send_seq=129 receive_seq=129 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999487 adj=49997713 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1516 bytes_read=6688 bytes_retransmit=9 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000300 adj=63997723 Octopus_Pro_H723_V1.1: temp=34.6 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=7169 bytes_retransmit=0 bytes_invalid=0 send_seq=75 receive_seq=75 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000146 adj=31998767 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.994 sysload=0.08 cputime=80.446 memavail=3308092 print_time=18.451 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2466.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=7744 bytes_read=12129 bytes_retransmit=9 bytes_invalid=0 send_seq=497 receive_seq=497 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016179 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=936 bytes_read=4961 bytes_retransmit=0 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999490 adj=49997516 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1522 bytes_read=6791 bytes_retransmit=9 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000323 adj=63997604 Octopus_Pro_H723_V1.1: temp=34.9 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=7525 bytes_retransmit=0 bytes_invalid=0 send_seq=76 receive_seq=76 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000151 adj=31998697 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.08 cputime=80.472 memavail=3308092 print_time=18.451 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2467.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=7750 bytes_read=12232 bytes_retransmit=9 bytes_invalid=0 send_seq=498 receive_seq=498 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016067 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=942 bytes_read=4977 bytes_retransmit=0 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999488 adj=49997477 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1528 bytes_read=6894 bytes_retransmit=9 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000337 adj=63997691 Octopus_Pro_H723_V1.1: temp=34.9 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=58.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=7881 bytes_retransmit=0 bytes_invalid=0 send_seq=77 receive_seq=77 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998734 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.07 cputime=80.499 memavail=3307200 print_time=18.451 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2468.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=9688 bytes_read=14014 bytes_retransmit=9 bytes_invalid=0 send_seq=595 receive_seq=595 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016000 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=948 bytes_read=4993 bytes_retransmit=0 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999496 adj=49997539 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1534 bytes_read=7040 bytes_retransmit=9 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000331 adj=63997869 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.1 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=8237 bytes_retransmit=0 bytes_invalid=0 send_seq=78 receive_seq=78 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000137 adj=31998775 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.07 cputime=80.612 memavail=3306952 print_time=25.947 buffer_time=0.393 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 2469.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=11595 bytes_read=15398 bytes_retransmit=9 bytes_invalid=0 send_seq=676 receive_seq=676 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016262 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=954 bytes_read=5022 bytes_retransmit=0 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999495 adj=49997611 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1540 bytes_read=7143 bytes_retransmit=9 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000328 adj=63997862 Octopus_Pro_H723_V1.1: temp=34.7 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=8593 bytes_retransmit=0 bytes_invalid=0 send_seq=79 receive_seq=79 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000142 adj=31998807 coil_temp=21.9 refs=0 mcu_temp=24.61 supply_voltage=2.995 sysload=0.07 cputime=80.714 memavail=3306952 print_time=26.837 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Endstop y still triggered after retract
Endstop y still triggered after retract
Endstop y still triggered after retract
Stats 2470.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=11898 bytes_read=15688 bytes_retransmit=9 bytes_invalid=0 send_seq=691 receive_seq=691 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016299 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=960 bytes_read=5038 bytes_retransmit=0 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999500 adj=49997387 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1546 bytes_read=7246 bytes_retransmit=9 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000328 adj=63997582 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=32.0 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=8949 bytes_retransmit=0 bytes_invalid=0 send_seq=80 receive_seq=80 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000160 adj=31998728 coil_temp=21.9 refs=0 mcu_temp=24.62 supply_voltage=2.995 sysload=0.07 cputime=80.753 memavail=3299364 print_time=27.437 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 2471.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=11904 bytes_read=15791 bytes_retransmit=9 bytes_invalid=0 send_seq=692 receive_seq=692 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016193 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=966 bytes_read=5054 bytes_retransmit=0 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999504 adj=49997407 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1552 bytes_read=7378 bytes_retransmit=9 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000327 adj=63997573 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.8 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=9305 bytes_retransmit=0 bytes_invalid=0 send_seq=81 receive_seq=81 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000152 adj=31998827 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.07 cputime=80.779 memavail=3299368 print_time=27.437 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2472.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000001 bytes_write=11910 bytes_read=15923 bytes_retransmit=9 bytes_invalid=0 send_seq=693 receive_seq=693 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016122 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=972 bytes_read=5070 bytes_retransmit=0 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999511 adj=49997521 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1558 bytes_read=7481 bytes_retransmit=9 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000330 adj=63997707 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=9661 bytes_retransmit=0 bytes_invalid=0 send_seq=82 receive_seq=82 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000168 adj=31998840 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.07 cputime=80.805 memavail=3302224 print_time=27.437 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 2473.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=11916 bytes_read=16041 bytes_retransmit=9 bytes_invalid=0 send_seq=694 receive_seq=694 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016050 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=978 bytes_read=5086 bytes_retransmit=0 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999522 adj=49997615 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1564 bytes_read=7598 bytes_retransmit=9 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000331 adj=63997802 Octopus_Pro_H723_V1.1: temp=34.8 EBB42_Gen2_v1.0: temp=31.9 raspberry_pi: temp=59.9 heater_bed: target=0 temp=20.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=10017 bytes_retransmit=0 bytes_invalid=0 send_seq=83 receive_seq=83 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000162 adj=31998980 coil_temp=21.9 refs=0 mcu_temp=24.63 supply_voltage=2.995 sysload=0.07 cputime=80.831 memavail=3309764 print_time=27.437 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Starting Klippy...
Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
Git version: 'v0.12.0-402-g2817b348-dirty'
Untracked files: klippy/extras/beacon.py, klippy/extras/beacon_adaptive_heat_soak.py, klippy/extras/beacon_mesh.py, klippy/extras/beacon_true_zero_correction.py, klippy/extras/beacon_user_z_offset.py, klippy/extras/fastconfig.py, klippy/extras/gcode_shell_command.py, klippy/extras/linear_movement_vibrations.py, klippy/extras/named_offsets.py, klippy/extras/ratos.py, (+4 files)
Branch: ratos/v2.1.x
Remote: ratos-fork
Tracked URL: https://github.com/Rat-OS/klipper.git
CPU: 4 core ?
Python: '3.9.2 (default, Jan 24 2026, 09:41:14) \n[GCC 10.2.1 20210110]'
Start printer at Mon Feb 16 02:03:18 2026 (1771207398.4 20.5)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-pro-h723-11]
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=PG13,
z1_step_pin=PE2,
z1_dir_pin=PE3,
z1_enable_pin=PD4,
z1_uart_pin=PE1,
z1_diag_pin=PG14,
z2_step_pin=PE6,
z2_dir_pin=PA14,
z2_enable_pin=PE0,
z2_uart_pin=PD3,
z2_diag_pin=PG15,
z3_step_pin=PF9,
z3_dir_pin=PF10,
z3_enable_pin=PG2,
z3_uart_pin=PF2,
z3_diag_pin=PG12,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
e_power_draw_pin=null,
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,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PG15,
filament_sensor_motion_pin=PG14,
ratrig_vaoc_probe_pin=PG10,
ratrig_vaoc_led_pin=PB0,
ratrig_vaoc_fan_pin=PD13,
chamber_lighting_pin=PB11,
chamber_filter_4p_fan_pin=PD14,
chamber_filter_4p_fan_enable_pin=PD15
[mcu]
serial = /dev/RatOS/btt-octopus-pro-h723-11
[temperature_sensor Octopus_Pro_H723_V1.1]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_software_mosi_pin = PB5
spi_software_miso_pin = PB4
spi_software_sclk_pin = PB3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD3,
e_dir_pin=PD2,
e_enable_pin=PB6,
e_uart_pin=PB3,
e_heater_pin=PB0,
e_sensor_pin=PA1,
e_power_draw_pin=null,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB1,
bltouch_sensor_pin=PA5,
bltouch_control_pin=PA4,
probe_pin=PA5,
fan_part_cooling_pin=PB8,
fan_toolhead_cooling_pin=PB4,
fan_controller_board_pin=null,
heater_bed_heating_pin=null,
heater_bed_sensor_pin=null,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_fan_part_cooling_enable_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null,
run_led_pin=null,
rgb_led_data_pin=null,
filament_sensor_runout_pin=PA3,
filament_sensor_motion_pin=PA9,
ratrig_vaoc_probe_pin=null,
ratrig_vaoc_led_pin=null,
ratrig_vaoc_fan_pin=null,
chamber_lighting_pin=null,
chamber_filter_4p_fan_pin=null,
chamber_filter_4p_fan_enable_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-gen2-10-t0
[temperature_sensor EBB42_Gen2_v1.0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[lis2dw toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB1
spi_software_mosi_pin = toolboard_t0:PB11
spi_software_miso_pin = toolboard_t0:PB2
spi_software_sclk_pin = toolboard_t0:PB10
[gcode_macro RatOS]
variable_homing = "endstops"
variable_z_probe = "static"
variable_sensorless_x_current = 0.6
variable_sensorless_y_current = 0.9
variable_safe_home_x = "middle"
variable_safe_home_y = "middle"
variable_driver_type_x = "tmc2209"
variable_driver_type_y = "tmc2209"
variable_stowable_probe_stop_on_error = False
variable_chamber_filter_enable = True
variable_chamber_filter_speed = 0.5
variable_chamber_filter_disable_speed = 1.0
variable_chamber_filter_enable_at = "after_print_start"
variable_chamber_filter_disable_period = 300
variable_chamber_filter_disable_bed_temp = 0
variable_chamber_heater_enable = True
variable_chamber_heater_bed_temp = 115
variable_chamber_heater_preheating_temp = 150
variable_chamber_heater_heating_temp_offset = 25
variable_chamber_heater_control_external_heater = False
variable_chamber_heater_air_circulation_enable = True
variable_chamber_heater_air_circulation_fan_speed = 0.35
variable_chamber_heater_air_circulation_y_pos = 0
variable_chamber_heater_air_circulation_z_pos = 100
variable_chamber_heater_extra_fan_speed = 1.0
variable_chamber_heater_filter_fan_speed = 1.0
variable_led_status_action = 0.0,1.0,1.0
variable_led_status_success = 0.0,1.0,0.0
variable_led_status_error = 1.0,0.0,1.0
variable_led_status_on = 1.0,1.0,1.0
variable_led_status_off = 0.0,0.0,1.0
variable_led_status_standby = 0.1,0.1,0.1
variable_led_status_heating = 1.0,0.0,0.0
variable_led_status_cooling = 0.0,0.0,1.0
variable_calibrate_bed_mesh = True
variable_adaptive_mesh = True
variable_start_print_park_in = "front"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "front"
variable_end_print_park_z_hop = 20
variable_nozzle_priming = "primeblob"
variable_nozzle_prime_start_x = "max"
variable_nozzle_prime_start_y = "min"
variable_nozzle_prime_direction = "auto"
variable_nozzle_prime_bridge_fan = 102
variable_probe_for_priming_result = None
variable_probe_for_priming_end_result = None
variable_probe_for_priming_result_t1 = None
variable_probe_for_priming_end_result_t1 = None
variable_probe_for_priming_disable_mesh_constraints = False
variable_adaptive_prime_offset_threshold = -1.0
variable_last_z_offset = None
variable_runout_park_in = "front"
variable_enable_unload_tip_forming = False
variable_filament_unload_length = 150
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 = True
variable_preheat_extruder_temp = 150
variable_macro_travel_speed = 300
variable_macro_travel_accel = 3000
variable_macro_z_speed = 15
variable_bed_margin_x = [0, 0]
variable_bed_margin_y = [0, 0]
variable_printable_x_min = 0
variable_printable_x_max = 0
variable_printable_y_min = 0
variable_printable_y_max = 0
variable_end_print_motors_off = True
variable_status_color_ok = "00FF00"
variable_status_color_error = "FF0000"
variable_status_color_unknown = "FFFF00"
variable_end_print_retract_filament = 10
gcode =
ECHO_RATOS_VARS
variable_beacon_bed_mesh_scv = 25
variable_beacon_contact_z_homing = False
variable_beacon_contact_start_print_true_zero = True
variable_beacon_contact_start_print_true_zero_fuzzy_position = True
variable_beacon_contact_calibrate_model_on_true_zero = True
variable_beacon_contact_wipe_before_true_zero = True
variable_beacon_contact_wipe_before_true_zero_method = "probe_clean"
variable_beacon_contact_true_zero_temp = 170
variable_beacon_contact_prime_probing = True
variable_beacon_contact_expansion_compensation = True
variable_beacon_contact_bed_mesh = False
variable_beacon_contact_bed_mesh_samples = 2
variable_beacon_contact_z_tilt_adjust = False
variable_beacon_contact_z_tilt_adjust_samples = 2
variable_beacon_scan_compensation_enable = True
variable_beacon_scan_compensation_profile = "auto"
variable_beacon_scan_compensation_desired_spacing = 10
variable_beacon_scan_compensation_bed_temp_mismatch_is_error = False
variable_beacon_contact_poke_bottom_limit = -1
variable_beacon_scan_method_automatic = False
variable_beacon_adaptive_heat_soak_max_wait = 5400
variable_beacon_adaptive_heat_soak_extra_wait_after_completion = 0
variable_beacon_adaptive_heat_soak_layer_quality = 3
variable_beacon_adaptive_heat_soak_maximum_first_layer_duration = 1800
variable_beacon_contact_start_print_true_zero_fuzzy_radius = 20
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209"]
variable_y_axes = ["y"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2", "z3"]
[ratos_homing]
axes = xyz
z_hop = 15
z_hop_speed = 15
gcode =
_LED_ON
{% set prev_stop_on_error = printer["gcode_macro RatOS"].stowable_probe_stop_on_error %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set target_idex_mode = printer["dual_carriage"].carriage_1|lower %}
_IDEX_SINGLE
_SELECT_TOOL T={default_toolhead} TOOLSHIFT=false
{% endif %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE=True
M400
G90
{% set X = true if params.X is defined else false %}
{% set Y = true if params.Y is defined else false %}
{% set Z = true if params.Z is defined else false %}
{% if printer["gcode_macro RatOS"].home_y_first|default(false)|lower == 'true' %}
HOME_Y X={X} Y={Y} Z={Z}
HOME_X X={X} Y={Y} Z={Z}
{% else %}
HOME_X X={X} Y={Y} Z={Z}
HOME_Y X={X} Y={Y} Z={Z}
{% endif %}
HOME_Z X={X} Y={Y} Z={Z}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=stowable_probe_stop_on_error VALUE={prev_stop_on_error}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR
{% endif %}
{% endif %}
[gcode_macro HOME_X]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_x = printer["gcode_macro RatOS"].homing_x|lower %}
{% set homing_x = homing_x if homing_x else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_X" MSG="printable_x_max: {printable_x_max}, safe_home_x: {safe_home_x}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}"
{% if X or not Y and not Z %}
{% if homing_x == 'endstop' %}
G28 X
{% elif homing_x == 'sensorless' %}
{% if printer["dual_carriage"] is defined %}
{ action_emergency_stop("sensorless homing not supported on IDEX!") }
{% endif %}
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 %}
{% if printer["dual_carriage"] is defined %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % (0 if default_toolhead==1 else 1)].parking_position|float %}
SET_DUAL_CARRIAGE CARRIAGE={0 if default_toolhead==1 else 1} MODE=PRIMARY
G1 X{parking_position} F{speed}
SET_DUAL_CARRIAGE CARRIAGE={default_toolhead} MODE=PRIMARY
{% endif %}
{% set x_homed = True %}
G0 X{safe_home_x} F{speed}
M400
{% endif %}
[gcode_macro HOME_Y]
gcode =
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set homing = printer["gcode_macro RatOS"].homing|lower %}
{% set homing_y = printer["gcode_macro RatOS"].homing_y|lower %}
{% set homing_y = homing_y if homing_y else homing %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Y" MSG="printable_y_max: {printable_y_max}, safe_home_y: {safe_home_y}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}"
{% if Y or not X and not Z %}
{% if homing_y == 'endstop' %}
G28 Y
{% elif homing_y == '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 %}
[gcode_macro HOME_Z]
gcode =
{% set x_homed = 'x' in printer.toolhead.homed_axes %}
{% set y_homed = 'y' in printer.toolhead.homed_axes %}
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% set beacon_contact_z_homing = true if printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_z_home_position_fuzzing_radius = printer["gcode_macro RatOS"].beacon_z_home_position_fuzzing_radius|default(0)|float %}
{% set X = true if params.X|lower == 'true' else false %}
{% set Y = true if params.Y|lower == 'true' else false %}
{% set Z = true if params.Z|lower == 'true' else false %}
DEBUG_ECHO PREFIX="HOME_Z" MSG="x_homed: {x_homed}, y_homed: {y_homed}, z_probe: {z_probe}, beacon_contact_z_homing: {beacon_contact_z_homing}"
{% if Z or not Y and not X %}
RATOS_ECHO MSG="Homing Z"
{% if x_homed == False or y_homed == False %}
{ action_emergency_stop("X and Y must be homed before homing Z") }
{% else %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_z_homing %}
{% if beacon_contact_start_print_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro HOME_X_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_x_current}
{% endif %}
G4 P300
G28 X
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_x_sensorless"
[gcode_macro HOME_Y_SENSORLESS]
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
M204 S1000
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer["gcode_macro RatOS"].sensorless_y_current}
{% endif %}
G4 P300
G28 Y
{% if printer["gcode_macro RatOS"].x_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].x_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].x_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set x_driver = printer["gcode_macro RatOS"].driver_type_x|lower ~ " stepper_x" %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={printer.fastconfig.config[x_driver].run_current}
{% endif %}
{% if printer["gcode_macro RatOS"].y_axes is defined %}
{% for axis in printer["gcode_macro RatOS"].y_axes %}
{% set stepper = "stepper_" ~ axis|lower %}
{% set stepper_driver = printer["gcode_macro RatOS"].y_driver_types[loop.index0] ~ " " ~ stepper %}
SET_TMC_CURRENT STEPPER={stepper} CURRENT={printer.fastconfig.config[stepper_driver].run_current}
{% endfor %}
{% else %}
{% set y_driver = printer["gcode_macro RatOS"].driver_type_y|lower ~ " stepper_y" %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={printer.fastconfig.config[y_driver].run_current}
{% endif %}
G4 P300
RESTORE_TOOLHEAD_SETTINGS KEY="home_y_sensorless"
[gcode_macro _Z_HOP]
description = Move Z axis up by Z_HOP distance at Z_HOP_SPEED. In relative mode it will move Z axis up by Z_HOP distance. In absolute mode it will move Z axis to Z_HOP distance.
gcode =
{% set z_hop = printer.fastconfig.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro __MOVE_TO_SAFE_Z_HOME_ECHO_DEBUG]
gcode =
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="x: {params.X}, y: {params.Y}, z_hop: {params.Z_HOP}, fuzzy_radius: {params.FUZZY_RADIUS}, axis_maximum.x: {printer.toolhead.axis_maximum.x}, axis_maximum.y: {printer.toolhead.axis_maximum.y}, bed_margin_x: {printer['gcode_macro RatOS'].bed_margin_x}, bed_margin_y: {printer['gcode_macro RatOS'].bed_margin_y}, printable_x_max: {printer['gcode_macro RatOS'].printable_x_max}, printable_y_max: {printer['gcode_macro RatOS'].printable_y_max}"
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis. Specify ABL=1 to also ensure that automatic bed levelling is applied (if configured).
variable_is_kinematic_position_overriden = False
gcode =
{% set abl = params.ABL|default('')|lower in ('true', 'yes', '1') %}
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
RATOS_ECHO 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 %}
RATOS_ECHO MSG="Homing {axesToHome}"
G28 {axesToHome}
{% else %}
RATOS_ECHO MSG="All requested axes already homed. Skipping homing."
{% endif %}
{% endif %}
{% if abl %}
{% if printer.z_tilt is defined %}
{% if not printer.z_tilt.applied %}
RATOS_ECHO MSG="Performing Z tilt adjustment..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% else %}
RATOS_ECHO MSG="Z tilt already applied. Skipping Z tilt adjustment."
{% endif %}
{% elif printer.quad_gantry_level is defined %}
{% if not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Performing quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% else %}
RATOS_ECHO MSG="Quad gantry leveling already applied. Skipping quad gantry leveling."
{% endif %}
{% else %}
RATOS_ECHO MSG="No automatic bed leveling method configured. Skipping bed leveling."
{% endif %}
{% endif %}
[gcode_macro PID_CALIBRATE_HOTEND]
description = Perform a PID calibration test for a given extruder heater.
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set temp = params.TEMP|default(220)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_HOTEND" MSG="TEMP={temp}"
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO MSG="PID calibration hotend heater T0 at {temp}°C..."
PID_CALIBRATE HEATER=extruder TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
{% if toolhead==0 or toolhead==1 %}
RATOS_ECHO MSG="PID calibration hotend heater T{toolhead} at {temp}°C..."
PID_CALIBRATE HEATER=extruder{'' if toolhead==0 else toolhead} TARGET={temp}
_CONSOLE_SAVE_CONFIG
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_BED]
description = Perform a PID calibration test for the bed heater.
gcode =
{% set temp = params.TEMP|default(80)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_BED" MSG="TEMP={temp}"
RATOS_ECHO MSG="PID calibration bed heater at {temp}°C..."
PID_CALIBRATE HEATER=heater_bed TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
[gcode_macro PID_CALIBRATE_CHAMBER_HEATER]
description = Perform a PID calibration test for the chamber heater.
gcode =
{% set temp = params.TEMP|default(150)|int %}
DEBUG_ECHO PREFIX="PID_CALIBRATE_CHAMBER_HEATER" MSG="TEMP={temp}"
{% if printer["heater_generic chamber_heater"] is defined %}
RATOS_ECHO MSG="PID calibration chamber heater at {temp}°C..."
PID_CALIBRATE HEATER=chamber_heater TARGET={temp}
_CONSOLE_SAVE_CONFIG
_LEARN_MORE_CALIBRATION
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_heater" %}
{% set link_text = "RatOS Chamber Heater" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber heater found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro INITIALIZE_PA_TUNING]
description = Start a pressure advance tuning tower.
gcode =
{% set start = params.START|default(0.0)|float %}
{% set factor = params.FACTOR|default(0.001)|float %}
{% set layer_number = printer["gcode_macro _ON_LAYER_CHANGE"].layer_number|default(0)|int %}
{% set is_printing_gcode = true if printer["gcode_macro START_PRINT"].is_printing_gcode|default(true)|lower == 'true' else false %}
{% if is_printing_gcode and layer_number < 2 %}
DEBUG_ECHO PREFIX="START_PA_TOWER" MSG="START: {start}, FACTOR: {factor}"
RATOS_ECHO MSG="Starting pressure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% else %}
RATOS_ECHO MSG="Pressure advance tuning tower requires you to be printing gcode and on layer 1 to start."
{% endif %}
_LEARN_MORE_CALIBRATION
[gcode_macro CHAMBER_FILTER_ON]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro CHAMBER_FILTER_OFF]
gcode =
{% if printer["fan_generic filter"] is defined %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Deactivating chamber filter..."
_CHAMBER_FILTER_TURN_OFF
{% else %}
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="No chamber filter found" TYPE="warning" MSG={line_1}
{% endif %}
[gcode_macro _CHAMBER_FILTER_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set chamber_filter_enable_at = printer["gcode_macro RatOS"].chamber_filter_enable_at|default('after_print_start')|lower %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_ON" MSG="at: {at}, chamber_filter_enable: {chamber_filter_enable}, chamber_filter_enable_at: {chamber_filter_enable_at}, chamber_filter_speed: {chamber_filter_speed}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if chamber_filter_enable_at == at %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Activating chamber filter..."
_CHAMBER_FILTER_TURN_ON AT={at}
{% if chamber_filter_enable_at == "print_end" %}
_LED_CHAMBER_FILTER_ON
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_FILTER_OFF]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF" MSG="chamber_filter_enable: {chamber_filter_enable}, filter_disable_period: {filter_disable_period}, filter_disable_bed_temp: {filter_disable_bed_temp}"
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_period > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting {filter_disable_period} seconds before turning chamber filter off..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION={filter_disable_period}
{% endif %}
{% if filter_disable_bed_temp > 0 %}
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Waiting for bed temp to cool down to {filter_disable_bed_temp}°C to turn filter off..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=0 MAXIMUM={filter_disable_bed_temp}
_CHAMBER_FILTER_TURN_OFF
_LED_CHAMBER_FILTER_OFF
{% endif %}
{% endif %}
[delayed_gcode _CHAMBER_FILTER_OFF_TIMER]
gcode =
DEBUG_ECHO PREFIX="_CHAMBER_FILTER_OFF_TIMER" MSG="executed"
_CHAMBER_FILTER_TURN_OFF
RATOS_ECHO PREFIX="CHAMBER_FILTER" MSG="Chamber filter turned off!"
_LED_CHAMBER_FILTER_OFF
[gcode_macro _CHAMBER_FILTER_TURN_ON]
gcode =
{% set at = params.AT|default('')|lower %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_speed|default(0)|float %}
{% if at == "print_end" %}
{% set chamber_filter_speed = printer["gcode_macro RatOS"].chamber_filter_disable_speed|default(0)|float %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_FILTER_OFF_TIMER DURATION=0
SET_FAN_SPEED FAN=filter SPEED={chamber_filter_speed}
[gcode_macro _CHAMBER_FILTER_TURN_OFF]
gcode =
SET_FAN_SPEED FAN=filter SPEED=0
[gcode_macro _CHAMBER_FILTER_SANITY_CHECK]
gcode =
{% set chamber_filter_enable = true if printer["gcode_macro RatOS"].chamber_filter_enable|default(true)|lower == 'true' else false %}
{% set filter_disable_period = printer["gcode_macro RatOS"].chamber_filter_disable_period|default(0)|int %}
{% set filter_disable_bed_temp = printer["gcode_macro RatOS"].chamber_filter_disable_bed_temp|default(0)|int %}
{% if chamber_filter_enable and printer["fan_generic filter"] is defined %}
{% if filter_disable_bed_temp > 0 and filter_disable_period > 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable, not both.")}
{% endif %}
{% if filter_disable_bed_temp == 0 and filter_disable_period == 0 %}
_LEARN_MORE_CHAMBER_FILTER
{action_respond_info("Wrong chamber filter options configured! Set 'filter_disable_bed_temp' or 'filter_disable_period' variable.")}
{% endif %}
{% endif %}
[gcode_macro CHAMBER_HEATER_ON]
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(45)|int %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp} IS_FROM_START_PRINT=False
[gcode_macro CHAMBER_HEATER_OFF]
gcode =
_CHAMBER_HEATER_OFF
[gcode_macro _CHAMBER_HEATER_ON]
variable_chamber_temp = 0
gcode =
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set is_from_start_print = true if params.IS_FROM_START_PRINT|default(True)|lower == 'true' else false %}
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set chamber_heater_enable = true if printer["gcode_macro RatOS"].chamber_heater_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
{% set chamber_heater_preheating_temp = printer["gcode_macro RatOS"].chamber_heater_preheating_temp|default(150)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set chamber_heater_control_external_heater = true if printer["gcode_macro RatOS"].chamber_heater_control_external_heater|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_enable = true if printer["gcode_macro RatOS"].chamber_heater_air_circulation_enable|default(true)|lower == 'true' else false %}
{% set chamber_heater_air_circulation_fan_speed = printer["gcode_macro RatOS"].chamber_heater_air_circulation_fan_speed|default(0.35)|float %}
{% set chamber_heater_air_circulation_y_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_y_pos|default(0)|float %}
{% set chamber_heater_air_circulation_z_pos = printer["gcode_macro RatOS"].chamber_heater_air_circulation_z_pos|default(100)|float %}
DEBUG_ECHO PREFIX="_CHAMBER_HEATER_ON" MSG="chamber_heater_enable: {chamber_heater_enable}, chamber_heater_preheating_temp: {chamber_heater_preheating_temp}, chamber_heater_heating_temp_offset: {chamber_heater_heating_temp_offset}, bed_temp: {bed_temp}, chamber_temp: {chamber_temp}, start_chamber_temp: {start_chamber_temp}"
{% if chamber_heater_enable and chamber_temp > 0 and chamber_heater_bed_temp > 0 %}
_LED_HEATING
RATOS_ECHO MSG="Preheating chamber to {(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}°C..."
{% set chamber_temp_sensor = "extruder" %}
{% if printer["dual_carriage"] is defined and default_toolhead == 1 %}
{% set chamber_temp_sensor = "extruder1" %}
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% set chamber_temp_sensor = "temperature_sensor chamber" %}
{% endif %}
{% set current_chamber_temp = printer['%s' % chamber_temp_sensor].temperature|int %}
{% set needs_heating = current_chamber_temp < (start_chamber_temp if start_chamber_temp > 0 else chamber_temp) %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_BEFORE_PREHEATING
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
{% if not is_from_start_print %}
MAYBE_HOME
{% endif %}
G0 Z{chamber_heater_air_circulation_z_pos} F{z_speed}
G0 Y{chamber_heater_air_circulation_y_pos} F{speed}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={chamber_heater_air_circulation_fan_speed if default_toolhead == 1 else 0}
{% else %}
M106 S{(255 * chamber_heater_air_circulation_fan_speed)}
{% endif %}
{% else %}
{% if is_from_start_print %}
G0 Z{z} F{z_speed}
{% endif %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE={chamber_temp}
{% if needs_heating %}
M140 S{chamber_heater_bed_temp}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={chamber_heater_preheating_temp}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if needs_heating %}
_CHAMBER_HEATER_EXTRA_FAN_ON
{% endif %}
{% if needs_heating %}
TEMPERATURE_WAIT SENSOR="{chamber_temp_sensor}" MINIMUM={(start_chamber_temp if start_chamber_temp > 0 else chamber_temp)}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% endif %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED=0
_CHAMBER_FILTER_ON AT="before_print_start"
{% endif %}
{% endif %}
{% if needs_heating %}
{% if chamber_heater_air_circulation_enable and chamber_heater_air_circulation_fan_speed > 0 %}
G28 Z
{% endif %}
{% endif %}
{% if needs_heating %}
_USER_CHAMBER_HEATER_AFTER_PREHEATING
{% endif %}
{% if printer["temperature_sensor chamber"] is defined %}
{% if printer["heater_generic chamber_heater"] is defined %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined and chamber_heater_control_external_heater %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
_LED_SUCCESS
{% endif %}
[gcode_macro _CHAMBER_HEATER_OFF]
gcode =
RATOS_ECHO MSG="Deactivating chamber heater..."
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=0
SET_GCODE_VARIABLE MACRO=_CHAMBER_HEATER_ON VARIABLE=chamber_temp VALUE=0
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
_CHAMBER_HEATER_EXTRA_FAN_OFF
[delayed_gcode _CHAMBER_HEATER_CONTROL]
initial_duration = 0.
gcode =
{% set chamber_temp = printer["gcode_macro _CHAMBER_HEATER_ON"].chamber_temp|default(0)|int %}
{% set chamber_heater_heating_temp_offset = printer["gcode_macro RatOS"].chamber_heater_heating_temp_offset|default(20)|int %}
{% set current_chamber_temp = printer['temperature_sensor chamber'].temperature|int %}
{% if current_chamber_temp < chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={(chamber_temp + chamber_heater_heating_temp_offset)}
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=1.0
{% endif %}
{% endif %}
{% if current_chamber_temp >= chamber_temp %}
{% if printer["heater_generic chamber_heater"] is defined %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% endif %}
{% if printer["output_pin chamber_heater_pin"] is defined %}
SET_PIN PIN=chamber_heater_pin VALUE=0.0
{% endif %}
{% endif %}
UPDATE_DELAYED_GCODE ID=_CHAMBER_HEATER_CONTROL DURATION=5
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON]
gcode =
{% set chamber_heater_extra_fan_speed = printer["gcode_macro RatOS"].chamber_heater_extra_fan_speed|default(0.0)|float %}
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
{% if chamber_heater_extra_fan_speed > 0 %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED={chamber_heater_extra_fan_speed}
{% endif %}
{% endif %}
[gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF]
gcode =
{% if printer["fan_generic chamber_heater_extra_fan"] is defined %}
SET_FAN_SPEED FAN=chamber_heater_extra_fan SPEED=0
{% endif %}
[gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING]
description = Will be executed before chamber preheating, only if heating is needed.
gcode =
[gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING]
description = Will be executed after chamber preheating, only if heating was needed.
gcode =
[gcode_macro _LED_START_PRINTING]
gcode =
_LED_ACTION
[gcode_macro _LED_START_PRINTING_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_PRINTING]
gcode =
_LED_ON TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_PAUSE]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_ON]
gcode =
_LED_ACTION
[gcode_macro _LED_CHAMBER_FILTER_OFF]
gcode =
_LED_STANDBY
[gcode_macro _LED_LOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_LOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_RUNOUT]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_CLOG]
gcode =
_LED_ERROR TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_UNLOADING_FILAMENT]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_FILAMENT_UNLOADED]
gcode =
_LED_SUCCESS TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_DEACTIVATE_TOOLHEAD]
gcode =
_LED_OFF TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_STANDBY]
gcode =
_LED_STANDBY TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_TOOLHEAD_WAKEUP]
gcode =
_LED_ACTION TOOLHEAD={params.TOOLHEAD|default(-1)|int}
[gcode_macro _LED_MOTORS_OFF]
gcode =
_LED_STANDBY
_LED_VAOC_OFF
[gcode_macro _LED_INPUT_SHAPER_START]
gcode =
_LED_ACTION
[gcode_macro _LED_INPUT_SHAPER_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_START]
gcode =
_LED_ACTION
[gcode_macro _LED_BEACON_CALIBRATION_END]
gcode =
_LED_ON
[gcode_macro _LED_BEACON_CALIBRATION_ERROR]
gcode =
_LED_ERROR
[gcode_macro _LED_VAOC_ON]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=1.0 GREEN=1.0 BLUE=1.0
{% endif %}
[gcode_macro _LED_VAOC_OFF]
gcode =
{% if printer['neopixel vaoc_led'] is defined %}
SET_LED LED=vaoc_led RED=0.0 GREEN=0.0 BLUE=0.0
{% endif %}
[gcode_macro _LED_ACTION]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_action %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SUCCESS]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_success %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_HEATING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_heating %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_COOLING]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_cooling %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ERROR]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_error %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_ON]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_on %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_OFF]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_off %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_STANDBY]
gcode =
{% set rgb = printer["gcode_macro RatOS"].led_status_standby %}
_LED_SET TOOLHEAD={params.TOOLHEAD|default(-1)|int} R={rgb[0]} G={rgb[1]} B={rgb[2]}
[gcode_macro _LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
{% if toolhead >= 0 %}
{% if printer['neopixel nozzle_led_t%s' % toolhead] is defined %}
SET_LED LED={'nozzle_led_t%s' % toolhead} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% else %}
{% if printer['neopixel nozzle_led_t0'] is defined %}
SET_LED LED={'nozzle_led_t0'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% if printer['neopixel nozzle_led_t1'] is defined %}
SET_LED LED={'nozzle_led_t1'} RED={r} GREEN={g} BLUE={b} SYNC=0
{% endif %}
{% endif %}
_USER_LED_SET { rawparams }
[gcode_macro _USER_LED_SET]
gcode =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set r = params.R|default(0)|float %}
{% set g = params.G|default(0)|float %}
{% set b = params.B|default(0)|float %}
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% if filament_name == '' or filament_type == '' %}
{% set filament_name = 'unknown' %}
{% set filament_type = 'unknown' %}
{% endif %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_LOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME={filament_name} TYPE={filament_type} AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_LOAD_FILAMENT]
description = Load filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_LOAD_FILAMENT" MSG="TEMP={temp}"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=load_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
_LOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
RESTORE_GCODE_STATE NAME=load_state
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament load routine complete, please check that the filament was loaded correctly."
[gcode_macro _IDEX_LOAD_FILAMENT]
description = Load filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Loading filament into T{toolhead}..."
DEBUG_ECHO PREFIX="_IDEX_LOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_LOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
_LOAD_FILAMENT TOOLHEAD={toolhead} TEMP={temp} AUTOMATED={automated}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
{% if filament_name != '' and filament_type != '' %}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('{filament_type}', '{filament_name}', {temp})"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='"{filament_name}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='"{filament_type}"'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE={temp}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_ok}"'
_LED_FILAMENT_LOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="Filament load routine for T{toolhead} complete, please check that the filament was loaded correctly."
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default(false)|lower == 'true' %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into hotend.."
G92 E0
G0 E{extruder_gear_to_cooling_position_distance} F{extruder_load_speed}
G92 E0
M400
RATOS_ECHO MSG="Filament loaded into hotend."
[gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set load_speed = printer["gcode_macro T%s" % toolhead].filament_load_speed|float * 60 %}
{% set filament_loading_nozzle_offset = printer["gcode_macro T%s" % toolhead].filament_loading_nozzle_offset|float %}
{% set cooling_position_to_nozzle_distance = printer["gcode_macro T%s" % toolhead].cooling_position_to_nozzle_distance|float %}
{% set purge_after_load = printer["gcode_macro T%s" % toolhead].purge_after_load|float %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Loading filament into nozzle... Please wait!"
G92 E0
G0 E{cooling_position_to_nozzle_distance + filament_loading_nozzle_offset} F{load_speed}
G92 E0
G4 P1000
_PURGE_FILAMENT TOOLHEAD={toolhead} E={purge_after_load}
RATOS_ECHO MSG="Filament loaded into nozzle!"
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
{% set filament_grabbing_length = printer["gcode_macro T%s" % toolhead].filament_grabbing_length|float %}
{% set filament_grabbing_speed = printer["gcode_macro T%s" % toolhead].filament_grabbing_speed|float %}
{% set resume_after_insert = true if printer["gcode_macro T%s" % toolhead].resume_after_insert|default(true)|lower == 'true' else false %}
{% set enable_insert_detection = true if printer["gcode_macro T%s" % toolhead].enable_insert_detection|default(true)|lower == 'true' else false %}
{% set current_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% if enable_insert_detection %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_INSERT" MSG="toolhead: {toolhead}, filament_grabbing_length: {filament_grabbing_length}, filament_grabbing_speed: {filament_grabbing_speed}, current_idex_mode: {current_idex_mode}"
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Loading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
RATOS_ECHO MSG="Filament inserted into T{toolhead}, loading..."
FORCE_MOVE STEPPER={'extruder%s' % ('' if toolhead == 0 else toolhead)} DISTANCE={filament_grabbing_length} VELOCITY={filament_grabbing_speed}
M400
{% if printer.pause_resume.is_paused %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% if resume_after_insert %}
RESUME
{% endif %}
{% else %}
{% if not printer.virtual_sdcard.is_active %}
LOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_INSERT" MSG="TOOLHEAD: {toolhead}"
[gcode_macro _PURGE_BEFORE_UNLOAD]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set purge_before_unload = printer["gcode_macro T%s" % toolhead].purge_before_unload|float %}
DEBUG_ECHO PREFIX="_PURGE_BEFORE_UNLOAD" MSG="TOOLHEAD: {toolhead}"
{% if purge_before_unload > 0 %}
G92 E0
G0 E{purge_before_unload} F300
G92 E0
M400
{% endif %}
[gcode_macro _PURGE_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set e = params.E|int %}
{% set r = params.R|default(0)|int %}
DEBUG_ECHO PREFIX="_PURGE_FILAMENT" MSG="TOOLHEAD: {toolhead}, E: {e}"
{% if e > 0 %}
G92 E0
G0 E{e} F300
G92 E0
M400
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={0.4 if toolhead == 0 else 0}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={0.4 if toolhead == 1 else 0}
{% else %}
M106 S{(255 * 0.4)}
{% endif %}
{% endif %}
G4 P3000
{% if r > 0 %}
G92 E0
G0 E-{r} F300
G92 E0
M400
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["dual_carriage"] is defined %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED=0
SET_FAN_SPEED FAN=part_fan_t1 SPEED=0
{% else %}
M106 S0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{loading_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _CLEANING_MOVE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_CLEANING_MOVE" MSG="TOOLHEAD: {toolhead}"
{% if automated %}
{% if printer["dual_carriage"] is defined or printer["rmmu_hub"] is defined %}
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer["gcode_macro T%s" % toolhead].has_oozeguard|default(false)|lower == 'true' %}
{% if printer["gcode_macro T%s" % toolhead].parking_position is defined and printer["gcode_macro T%s" % toolhead].loading_position is defined %}
{% set loading_position = printer["gcode_macro T%s" % toolhead].loading_position|float %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% set cleaning_position = loading_position %}
{% if loading_position == parking_position %}
{% if loading_position > 0 %}
{% set cleaning_position = loading_position - 30 %}
{% else %}
{% set cleaning_position = loading_position + 30 %}
{% endif %}
{% endif %}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
G1 X{cleaning_position} F{speed}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _BED_MESH_SANITY_CHECK]
gcode =
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is defined %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_start_print_true_zero_fuzzy_position %}
CONSOLE_ECHO TYPE="error" TITLE="Defined zero reference not compatible with fuzzy true zero" MSG="Using fuzzy start print true zero position is not compatible with a defined zero_reference_position value in the [bed_mesh] section in printer.cfg._N_Please remove the zero_reference_position value from the [bed_mesh] section, or disable fuzzy true zero position in printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_start_print_true_zero_fuzzy_position: False"
_STOP_AND_RAISE_ERROR MSG="Defined zero reference not compatible with fuzzy true zero"
{% elif zero_ref_pos[0]|float|round != safe_home_x|float|round or zero_ref_pos[1]|float|round != safe_home_y|float|round %}
CONSOLE_ECHO TYPE="error" TITLE="Zero reference position does not match safe home position" MSG="Please update your bed mesh zero reference position in printer.cfg, like so:_N__N_[bed_mesh]_N_zero_reference_position: {safe_home_x|float|round},{safe_home_y|float|round}_N_"
_STOP_AND_RAISE_ERROR MSG="Zero reference position does not match safe home position"
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if beacon_contact_bed_mesh %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact bed mesh is enabled" MSG="Beacon contact bed mesh is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_bed_mesh: False"
{% endif %}
{% if beacon_scan_method_automatic %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon 'automatic' scan method is enabled" MSG="Beacon 'automatic' scan method is enabled. This is not recommended for normal use and may result in inaccurate bed mesh calibration._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_scan_method_automatic: False"
{% endif %}
{% if beacon_contact_z_tilt_adjust %}
CONSOLE_ECHO TYPE="warning" TITLE="Beacon contact z-tilt adjust is enabled" MSG="Beacon contact z-tilt adjust is enabled. This is not recommended for normal use and may result in inaccurate z-tilt adjustment._N_Please disable it in your printer.cfg, like so:_N__N_[gcode_macro RatOS]_N_variable_beacon_contact_z_tilt_adjust: False"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH]
gcode =
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE=None
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE=None
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION {rawparams}
{% endif %}
[gcode_macro _START_PRINT_BED_MESH]
variable_actual_true_zero_position_x = None
variable_actual_true_zero_position_y = None
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
SET_MACRO_TRAVEL_SETTINGS
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set X=[params.X0|default(-1)|float, params.X1|default(-1)|float] %}
{% set Y=[params.Y0|default(-1)|float, params.Y1|default(-1)|float] %}
DEBUG_ECHO PREFIX="_START_PRINT_BED_MESH" MSG="idex_mode: {idex_mode}, X: {X}, Y: {Y}"
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set zero_ref_pos = printer.fastconfig.settings.bed_mesh.zero_reference_position %}
{% if zero_ref_pos is not defined %}
{% set zero_ref_pos = [safe_home_x if actual_true_zero_position_x is none else actual_true_zero_position_x, safe_home_y if actual_true_zero_position_y is none else actual_true_zero_position_y] %}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set X=[0, printable_x_max] %}
{% endif %}
{% set beacon_bed_mesh_scv = printer["gcode_macro RatOS"].beacon_bed_mesh_scv|default(25)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% if printer.fastconfig.settings.beacon is defined and not beacon_contact_bed_mesh %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={beacon_bed_mesh_scv}
{% endif %}
{% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %}
{% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %}
BED_MESH_CLEAR
{% if printer["gcode_macro RatOS"].adaptive_mesh|lower == 'true' %}
CALIBRATE_ADAPTIVE_MESH PROFILE="{default_profile}" X0={X[0]} X1={X[1]} Y0={Y[0]} Y1={Y[1]} T={params.T|int} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={idex_mode} ZERO_REF_POS_X={zero_ref_pos[0]} ZERO_REF_POS_Y={zero_ref_pos[1]}
{% else %}
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD="{default_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD="{printer["gcode_macro RatOS"].bed_mesh_profile}"
SET_ZERO_REFERENCE_POSITION X={zero_ref_pos[0]} Y={zero_ref_pos[1]}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_bed_mesh"
[gcode_macro CALIBRATE_ADAPTIVE_MESH]
gcode =
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_bed_mesh_samples = printer["gcode_macro RatOS"].beacon_contact_bed_mesh_samples|default(2)|int %}
{% set beacon_contact_bed_mesh = true if printer["gcode_macro RatOS"].beacon_contact_bed_mesh|default(false)|lower == 'true' else false %}
{% set beacon_scan_method_automatic = true if printer["gcode_macro RatOS"].beacon_scan_method_automatic|default(false)|lower == 'true' else false %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set default_profile = params.PROFILE %}
{% set x0 = params.X0|default(-1)|float %}
{% set y0 = params.Y0|default(-1)|float %}
{% set x1 = params.X1|default(-1)|float %}
{% set y1 = params.Y1|default(-1)|float %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Received coordinates X0={x0|round(1)} Y0={y0|round(1)} X1={x1|round(1)} Y1={y1|round(1)}"
{% if x0 >= x1 or y0 >= y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Invalid coordinates received. Please check your slicer settings. Falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if params.ZERO_REF_POS_X is defined and params.ZERO_REF_POS_Y is defined %}
{% set zero_ref_pos_x = params.ZERO_REF_POS_X|float %}
{% set zero_ref_pos_y = params.ZERO_REF_POS_Y|float %}
{% if zero_ref_pos_x < x0 or zero_ref_pos_x > x1 or zero_ref_pos_y < y0 or zero_ref_pos_y > y1 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Zero reference position X={zero_ref_pos_x|round(1)} Y={zero_ref_pos_y|round(1)} is outside the mesh region, expanding mesh region to include it."
{% set x0 = [x0, zero_ref_pos_x]|min %}
{% set y0 = [y0, zero_ref_pos_y]|min %}
{% set x1 = [x1, zero_ref_pos_x]|max %}
{% set y1 = [y1, zero_ref_pos_y]|max %}
{% endif %}
{% endif %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float %}
{% set mesh_x0 = [[x0, max_x]|min, min_x]|max %}
{% set mesh_y0 = [[y0, max_y]|min, min_y]|max %}
{% set mesh_x1 = [[x1, max_x]|min, min_x]|max %}
{% set mesh_y1 = [[y1, max_y]|min, min_y]|max %}
{% if mesh_x0 == min_x and mesh_y0 == min_y and mesh_x1 == max_x and mesh_y1 == max_y %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Print is using the full bed, falling back to full bed mesh."
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}"
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}"
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% endif %}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}"
{% endif %}
{% else %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% set probe_count_x = mesh_config.probe_count.split(",")[0]|int %}
{% if mesh_config.probe_count.split(",")|length == 2 %}
{% set probe_count_y = mesh_config.probe_count.split(",")[1]|int %}
{% else %}
{% set probe_count_y = mesh_config.probe_count.split(",")[0]|int %}
{% endif %}
{% set probe_x_step = (max_x - min_x) / probe_count_x %}
{% set probe_y_step = (max_y - min_y) / probe_count_y %}
{% set mesh_count_x = ([(mesh_x1 - mesh_x0) / probe_x_step, 3]|max)|int %}
{% set mesh_count_y = ([(mesh_y1 - mesh_y0) / probe_y_step, 3]|max)|int %}
{% set min_mesh_count = [mesh_count_x, mesh_count_y]|min %}
{% set max_mesh_count = [mesh_count_x, mesh_count_y]|max %}
{% set algorithm = mesh_config.algorithm %}
{% if algorithm|lower == 'lagrange' and max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="cannot exceed a probe_count of 6 when using lagrange interpolation. Falling back to bicubic interpolation."
{% set algorithm = 'bicubic' %}
{% endif %}
{% if algorithm|lower == 'bicubic' and min_mesh_count < 4 %}
{% if max_mesh_count > 6 %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="invalid probe_count option when using bicubic interpolation. Combination of 3 points on one axis with more than 6 on another is not permitted. Forcing minimum mesh count to be 4."
{% set min_mesh_count = 4 %}
{% else %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="bicubic interpolation with a probe_count of less than 4 points detected. Forcing lagrange interpolation."
{% set algorithm = 'lagrange' %}
{% endif %}
{% endif %}
{% set mesh_count_x = ([min_mesh_count, mesh_count_x]|max)|int %}
{% set mesh_count_x = ([max_mesh_count, mesh_count_x]|min)|int %}
{% set mesh_count_y = ([min_mesh_count, mesh_count_y]|max)|int %}
{% set mesh_count_y = ([max_mesh_count, mesh_count_y]|min)|int %}
{% set should_prime = printer["gcode_macro RatOS"].nozzle_priming == 'primeblob' %}
{% if printer["dual_carriage"] is not defined %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% else %}
{% set probe_first = printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == "min" or printer["gcode_macro RatOS"].nozzle_prime_start_y|float(printable_y_max) < printable_y_max / 2 %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.fastconfig.settings.beacon is defined and printer.fastconfig.settings.beacon.mesh_runs % 2 == 0 and not probe_first %}
{% set probe_first = true %}
{% endif %}
{% if should_prime and probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="mesh coordinates X0={mesh_x0|round(1)} Y0={mesh_y0|round(1)} X1={mesh_x1|round(1)} Y1={mesh_y1|round(1)}"
{% if printer.fastconfig.settings.beacon is defined %}
{% if beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y} RELATIVE_REFERENCE_INDEX=-1
{% else %}
{% if beacon_scan_method_automatic %}
BED_MESH_CALIBRATE METHOD=automatic PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% endif %}
_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED
{% else %}
BED_MESH_CALIBRATE PROFILE="{default_profile}" ALGORITHM={algorithm} MESH_MIN={mesh_x0},{mesh_y0} MESH_MAX={mesh_x1},{mesh_y1} PROBE_COUNT={mesh_count_x},{mesh_count_y}
{% endif %}
{% if should_prime and not probe_first %}
{% if printer["dual_carriage"] is not defined %}
PROBE_FOR_PRIMING
{% else %}
{% if both_toolheads %}
PROBE_FOR_PRIMING TOOLHEAD=0 IDEX_MODE={idex_mode}
PROBE_FOR_PRIMING TOOLHEAD=1 IDEX_MODE={idex_mode}
{% else %}
PROBE_FOR_PRIMING TOOLHEAD={params.T|int} IDEX_MODE={idex_mode}
{% endif %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
STOW_PROBE
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M84]
rename_existing = M84.1
gcode =
M84.1
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_OFFSET X=0 Y=0
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=SET_PRESSURE_ADVANCE VARIABLE=snyc_toolheads VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro _VAOC"] is defined %}
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started VALUE=False
SET_GCODE_VARIABLE MACRO=_VAOC VARIABLE=is_started_at_temp VALUE=False
{% endif %}
_IDEX_SINGLE INIT=1
{% endif %}
SET_SKEW CLEAR=1
_LED_MOTORS_OFF
[gcode_macro M104]
rename_existing = M104.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
DEBUG_ECHO PREFIX="M104" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set temperature_offset_t0 = printer["gcode_macro T0"].temperature_offset|default(0)|int %}
{% set temperature_offset_t1 = printer["gcode_macro T1"].temperature_offset|default(0)|int %}
{% set s0 = [s + temperature_offset_t0, 0]|max %}
{% set s1 = [s + temperature_offset_t1, 0]|max %}
{% if temperature_offset_t0 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t0}°C added to toolhead T0."
{% endif %}
{% if temperature_offset_t1 != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset_t1}°C added to toolhead T1."
{% endif %}
{% else %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M104" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% else %}
M104.1 S{s} T{t}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M109]
rename_existing = M109.1
gcode =
{% set s = params.S|default(0)|int %}
{% set t = params.T|default(-1)|int %}
{% set t = 0 if t == -1 else t %}
{% if printer["rmmu_hub"] is defined %}
{% set t = printer["rmmu_hub"].logical_mapping["%s" % t]["PHYSICAL_TOOLHEAD"]|int %}
{% endif %}
DEBUG_ECHO PREFIX="M109" MSG="s: {s}, t: {t}"
{% if printer["gcode_macro T%s" % t] is defined %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set s = [s + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="M109" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% set is_in_standby = false %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% if toolchange_standby_temp > -1 %}
{% set is_in_standby = true if printer["gcode_macro T%s" % t].standby|default(false)|lower == 'true' else false %}
{% endif %}
{% endif %}
{% if not is_in_standby %}
M109.1 S{s} T{t}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro SET_HEATER_TEMPERATURE]
rename_existing = SET_HEATER_TEMPERATURE_BASE
gcode =
{% set heater = params.HEATER|default("") %}
{% set target = params.TARGET|default(0)|int %}
DEBUG_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="heater: {heater}, target: {target}"
{% set t = -1 %}
{% if heater|lower == "extruder" or heater|lower == "extruder1" %}
{% set t = 0 if heater|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and target > 0 %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% set target = [target + temperature_offset, 0]|max %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="SET_HEATER_TEMPERATURE" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
SET_HEATER_TEMPERATURE_BASE HEATER="{heater}" TARGET={target}
{% if t != -1 and printer.fastconfig.settings.beacon is defined %}
{% set is_printing_gcode = printer["gcode_macro START_PRINT"].is_printing_gcode|default(false)|lower == 'true' %}
{% if is_printing_gcode %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
{% endif %}
[gcode_macro TEMPERATURE_WAIT]
rename_existing = TEMPERATURE_WAIT_BASE
gcode =
{% set sensor = params.SENSOR|default("") %}
{% set minimum = params.MINIMUM|default(-1)|int %}
{% set maximum = params.MAXIMUM|default(-1)|int %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="sensor: {sensor}, minimum: {minimum}, maximum: {maximum}"
{% set t = -1 %}
{% if sensor|lower == "extruder" or sensor|lower == "extruder1" %}
{% set t = 0 if sensor|lower == "extruder" else 1 %}
{% if printer["gcode_macro T%s" % t] is defined and (minimum > 0 or maximum > 0) %}
{% set temperature_offset = printer["gcode_macro T%s" % t].temperature_offset|default(0)|int %}
{% if minimum > -1 %}
{% set minimum = [minimum + temperature_offset, 0]|max %}
{% endif %}
{% if maximum > -1 %}
{% set maximum = [maximum + temperature_offset, 0]|max %}
{% endif %}
{% if temperature_offset != 0 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature offset of {temperature_offset}°C added to toolhead T{t}."
{% endif %}
{% endif %}
{% endif %}
{% set id = "sensor " ~ sensor if t == -1 else "toolhead T" ~ t %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum} MAXIMUM={maximum}
{% elif minimum > -1 and maximum == -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MINIMUM: {minimum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MINIMUM={minimum}
{% elif minimum == -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% else %}
DEBUG_ECHO PREFIX="TEMPERATURE_WAIT" MSG="neither MINIMUM or MAXIMUM args were specified, call TEMPERATURE_WAIT_BASE is expected to fail"
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for {id}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}"
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for {id} reached."
[gcode_macro SDCARD_PRINT_FILE]
rename_existing = SDCARD_PRINT_FILE_BASE
gcode =
{% if printer["ratos"] is defined %}
PROCESS_GCODE_FILE { rawparams }
{% else %}
SDCARD_PRINT_FILE_BASE { rawparams }
{% endif %}
[gcode_macro SKEW_PROFILE]
rename_existing = SKEW_PROFILE_BASE
variable_loaded_profile = ""
gcode =
{% if params.LOAD is defined %}
{% if printer.fastconfig.settings["skew_correction %s" % params.LOAD] is defined %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='"{params.LOAD}"'
{% endif %}
{% endif %}
SKEW_PROFILE_BASE { rawparams }
[gcode_macro SET_SKEW]
rename_existing = SET_SKEW_BASE
gcode =
{% if params.CLEAR is defined %}
{% if params.CLEAR|default(0)|int == 1 %}
SET_GCODE_VARIABLE MACRO=SKEW_PROFILE VARIABLE=loaded_profile VALUE='""'
{% endif %}
{% endif %}
SET_SKEW_BASE { rawparams }
[gcode_macro SET_VELOCITY_LIMIT]
rename_existing = SET_VELOCITY_LIMIT_BASE
gcode =
{% if params.ACCEL_TO_DECEL is defined %}
{% if params.ACCEL is defined %}
{% set accel = params.ACCEL|float %}
{% else %}
{% set accel = printer.toolhead.max_accel|float %}
{% endif %}
{% if params.VELOCITY is defined %}
{% set velocity = params.VELOCITY|float %}
{% else %}
{% set velocity = printer.toolhead.max_velocity|float %}
{% endif %}
{% if params.SQUARE_CORNER_VELOCITY is defined %}
{% set scv = params.SQUARE_CORNER_VELOCITY|float %}
{% else %}
{% set scv = printer.toolhead.square_corner_velocity|float %}
{% endif %}
{% set mcr = params.ACCEL_TO_DECEL|float / accel %}
DEBUG_ECHO PREFIX="SET_VELOCITY_LIMIT" MSG="ACCEL={accel}, VELOCITY={velocity}, SQUARE_CORNER_VELOCITY={scv}, MINIMUM_CRUISE_RATIO={mcr}"
SET_VELOCITY_LIMIT_BASE ACCEL={accel} VELOCITY={velocity} SQUARE_CORNER_VELOCITY={scv} MINIMUM_CRUISE_RATIO={1-mcr}
{% else %}
SET_VELOCITY_LIMIT_BASE { rawparams }
{% endif %}
[gcode_macro BED_MESH_CALIBRATE]
rename_existing = _BED_MESH_CALIBRATE_BASE
variable_abl_and_home_z_if_required = True
gcode =
{% set z_probe = printer["gcode_macro RatOS"].z_probe %}
{% if abl_and_home_z_if_required %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
G28 Z
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
G28 Z
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set beacon_default_probe_method = printer.fastconfig.settings.beacon.default_probe_method|default('proximity') %}
{% set probe_method = params.PROBE_METHOD|default(beacon_default_probe_method)|lower %}
{% if probe_method == 'proximity' %}
_CHECK_ACTIVE_BEACON_MODEL_TEMP TITLE="Bed mesh calibration warning"
{% endif %}
{% endif %}
{% if z_probe == "stowable" %}
DEPLOY_PROBE
{% endif %}
_BED_MESH_CALIBRATE_BASE {rawparams}
{% if z_probe == "stowable" %}
STOW_PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_APPLY_RATOS_BED_MESH_PARAMETERS {rawparams}
{% endif %}
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_BASE
gcode =
DEBUG_ECHO PREFIX="SET_GCODE_OFFSET" MSG="{rawparams|replace('"', '')|replace("'", '')}"
{% set z_before = printer.gcode_move.homing_origin.z|float %}
SET_GCODE_OFFSET_BASE {rawparams}
_AFTER_SET_GCODE_OFFSET Z_BEFORE={z_before}
[gcode_macro _AFTER_SET_GCODE_OFFSET]
gcode =
{% set z_before = params.Z_BEFORE|float %}
{% set z_after = printer.gcode_move.homing_origin.z|float %}
{% if z_before != z_after %}
_ALERT_NON_ZERO_Z_OFFSET FORCE=1
{% endif %}
[gcode_macro _START_PRINT_PARK]
gcode =
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_x = printer["gcode_macro RatOS"].start_print_park_x %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% endif %}
{% if printer["dual_carriage"] is defined and not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% if printer["gcode_macro RatOS"].start_print_park_x is defined and printer["gcode_macro RatOS"].start_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="start_print_park_x is ignored for IDEX printers"
{% endif %}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={start_print_park_in} X={start_print_park_x}
G0 Z{z} F{z_speed}
[gcode_macro _END_PRINT_PARK]
gcode =
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro RatOS"].end_print_park_x is defined and printer["gcode_macro RatOS"].end_print_park_x != '' %}
RATOS_ECHO PREFIX="WARNING" MSG="end_print_park_x is ignored for IDEX printers"
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
PARK_TOOLHEAD
G90
{% endif %}
_PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x}
[gcode_macro _PARK]
gcode =
{% set x = params.X %}
{% set location = params.LOCATION|default('back')|lower %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set nozzle_priming = printer["gcode_macro RatOS"].nozzle_priming|lower %}
CACHE_TOOLHEAD_SETTINGS KEY="park"
SET_MACRO_TRAVEL_SETTINGS
{% if x != '' %}
{% if x|float >= printer.toolhead.axis_minimum.x + 5 and x|float <= printable_x_max - 5 %}
{% set park_x = x|float %}
{% else %}
{action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% else %}
{% set park_x = printable_x_max / 2 %}
{% endif %}
{% set park_y = printable_y_max - 15 %}
{% if location == 'front' %}
{% set park_y = printer.toolhead.axis_minimum.y + 5 %}
{% elif location == 'center' %}
{% set park_y = printable_y_max / 2 %}
{% elif location == 'primeblob' and printer["dual_carriage"] is defined %}
{% set park_y = printable_y_max - 15 %}
{% endif %}
{% if location == 'primeblob' and printer["dual_carriage"] is not defined %}
{% if (nozzle_priming == 'primeblob' or nozzle_priming == 'primeline') %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set park_x = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set park_x = printable_x_max - 5 %}
{% else %}
{% set park_x = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set park_y = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set park_y = printable_y_max - 5 %}
{% else %}
{% set park_y = nozzle_prime_start_y|float %}
{% endif %}
{% endif %}
{% endif %}
G90
{% if printer["dual_carriage"] is not defined %}
G0 X{park_x} Y{park_y} F{speed}
{% else %}
G0 Y{park_y} F{speed}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="park"
[gcode_macro SAVE_PROBE_RESULT]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
{% set last_z_offset = 9999.9 %}
{% if printer.fastconfig.settings.beacon is defined %}
{% set current_z = printer.toolhead.position.z|float %}
{% if beacon_contact_prime_probing %}
{% set last_z_offset = printer.beacon.last_z_result %}
{% else %}
{% set last_z_offset = printer.beacon.last_sample.dist - current_z %}
{% endif %}
{% elif printer.fastconfig.settings.bltouch is defined %}
{% set config_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set config_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Saving offset adjustment of {last_z_offset} in {params.VARIABLE|default('last_z_offset')}"
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE={params.VARIABLE|default('last_z_offset')} VALUE={last_z_offset}
[gcode_macro PROBE_FOR_PRIMING]
gcode =
{% set probe_for_priming_disable_mesh_constraints = true if printer["gcode_macro RatOS"].probe_for_priming_disable_mesh_constraints|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower != 'false' %}
SAVE_GCODE_STATE NAME=probe_for_priming_state
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the prime location.."
CACHE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
SET_MACRO_TRAVEL_SETTINGS
{% set t = params.TOOLHEAD|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% if idex_mode == '' %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% if t == 0 %}
{% set x_start = 5 %}
{% else %}
{% set x_start = printable_x_max - 5 %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% endif %}
{% endif %}
{% set z = printer.fastconfig.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.fastconfig.config.bed_mesh %}
{% if printer.fastconfig.settings.bltouch is defined %}
{% set x_offset = printer.fastconfig.settings.bltouch.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.bltouch.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.bltouch.z_offset|float %}
{% elif printer.fastconfig.settings.probe is defined %}
{% set x_offset = printer.fastconfig.settings.probe.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.probe.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.probe.z_offset|float %}
{% elif printer.fastconfig.settings.beacon is defined %}
{% set x_offset = printer.fastconfig.settings.beacon.x_offset|float %}
{% set y_offset = printer.fastconfig.settings.beacon.y_offset|float %}
{% set z_offset = printer.fastconfig.settings.beacon.trigger_distance|float %}
{% else %}
{ action_raise_error("No probe, beacon or bltouch section found. Adaptive priming only works with a [probe], [beacon] or [bltouch] section defined.") }
{% endif %}
{% if z < z_offset %}
{ action_raise_error("Horizontal move Z ({z}) is below your probe's Z offset ({z_offset}). Please adjust your horizontal_move_z setting in [bed_mesh] to be above {z}.") }
{% endif %}
{% if not probe_for_priming_disable_mesh_constraints %}
{% set min_x = mesh_config.mesh_min.split(",")[0]|float - x_offset %}
{% set min_y = mesh_config.mesh_min.split(",")[1]|float - y_offset %}
{% set max_x = mesh_config.mesh_max.split(",")[0]|float - x_offset %}
{% set max_y = mesh_config.mesh_max.split(",")[1]|float - y_offset %}
{% set x_start = [[x_start, max_x]|min, min_x]|max %}
{% set y_start = [[y_start, max_y]|min, min_y]|max %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the start of the prime location at {x_start}, {y_start}"
G90
M83
G0 Z{z} F{z_speed}
G1 X{x_start} Y{y_start} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result
{% endif %}
{% if idex_mode == '' %}
{% set x_end = x_start %}
{% set y_end = y_start + 45 %}
{% else %}
{% if t==1 %}
{% set x_end = x_start - 45 %}
{% else %}
{% set x_end = x_start + 45 %}
{% endif %}
{% set y_end = y_start %}
{% endif %}
RATOS_ECHO PREFIX="Adaptive Mesh" MSG="Probing the end of the prime location at {x_end}, {y_end}"
G1 X{x_end} Y{y_end} F{speed}
PROBE_CURRENT_POSITION
{% if t == 1 %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result_t1
{% else %}
SAVE_PROBE_RESULT VARIABLE=probe_for_priming_end_result
{% endif %}
RESTORE_GCODE_STATE NAME=probe_for_priming_state
RESTORE_TOOLHEAD_SETTINGS KEY="probe_for_priming"
{% endif %}
[gcode_macro RESET_PRIME_PROBE_STATE]
gcode =
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result VALUE=None
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result_t1 VALUE=None
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_end_result_t1 VALUE=None
{% endif %}
[gcode_macro PROBE_CURRENT_POSITION]
gcode =
{% set beacon_contact_prime_probing = true if printer["gcode_macro RatOS"].beacon_contact_prime_probing|default(false)|lower == 'true' else false %}
SAVE_GCODE_STATE NAME=probe_current_position_state
{% if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
ASSERT_PROBE_DEPLOYED
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
BEACON_QUERY
{% else %}
RESTORE_GCODE_STATE NAME=probe_current_position_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_z_speed|float}
{% endif %}
[gcode_macro PRIME_BLOB]
description = Prints a primeblob, used internally, if configured, as part of the START_PRINT macro.
variable_x_offset = 5
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="prime_blob"
SET_MACRO_TRAVEL_SETTINGS
RATOS_ECHO PREFIX="Priming" MSG="Priming nozzle with prime blob.."
{% set current_toolhead = 0 %}
{% set target_idex_mode = '' %}
{% set extruder = 'extruder' %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE is defined %}
{% set target_idex_mode = params.IDEX_MODE|default('')|lower %}
{% else %}
{ action_raise_error("IDEX_MODE parameter not found for PRIME_BLOB macro. This is likely a bug.") }
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Priming in IDEX {target_idex_mode} mode.."
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set current_toolhead = 1 if current_idex_mode=='primary' else 0 %}
{% set extruder = 'extruder1' if current_toolhead == 1 else 'extruder' %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
SAVE_GCODE_STATE NAME=prime_blob_state
{% endif %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|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 fan_speed = printer["gcode_macro RatOS"].nozzle_prime_bridge_fan|float %}
{% set nozzle_diameter = printer.fastconfig.settings[extruder].nozzle_diameter|float %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set has_start_offset_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) != 9999.9 %}
{% if printer["dual_carriage"] is defined %}
{% set has_start_offset_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) != 9999.9 %}
{% endif %}
{% set start_print_park_in = printer["gcode_macro RatOS"].start_print_park_in %}
{% set start_print_park_z_height = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set nozzle_prime_direction = printer["gcode_macro RatOS"].nozzle_prime_direction|lower %}
{% set nozzle_prime_start_x = printer["gcode_macro RatOS"].nozzle_prime_start_x %}
{% set nozzle_prime_start_y = printer["gcode_macro RatOS"].nozzle_prime_start_y %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% if target_idex_mode == '' %}
{% set x_factor = 0 %}
{% if nozzle_prime_start_x|lower == 'min' %}
{% set x_start = 5 %}
{% elif nozzle_prime_start_x|lower == 'max' %}
{% set x_start = printable_x_max - 5 %}
{% else %}
{% set x_start = nozzle_prime_start_x|float %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% set y_factor = 1 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_y_max - 5 %}
{% set y_factor = -1 %}
{% else %}
{% set y_start = nozzle_prime_start_y|float %}
{% if nozzle_prime_start_y|float < printable_y_max / 2 %}
{% set y_factor = 1 %}
{% else %}
{% set y_factor = -1 %}
{% endif %}
{% endif %}
{% if nozzle_prime_direction == 'forwards' %}
{% set y_factor = 1 %}
{% elif nozzle_prime_direction == 'backwards' %}
{% set y_factor = -1 %}
{% endif %}
{% if start_print_park_in == 'primeblob' %}
{% set z = 3 %}
{% else %}
{% set z = start_print_park_z_height %}
{% endif %}
{% else %}
{% set center_x = printable_x_max / 2 %}
{% set y_factor = 0 %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set x_start = center_x / 2 + 5 %}
{% set x_factor = 1 %}
{% else %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% if current_toolhead == 0 %}
{% set x_start = 55 %}
{% set x_factor = -1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 55 %}
{% set x_factor = 1 %}
{% endif %}
{% else %}
{% if current_toolhead == 0 %}
{% set x_start = 5 %}
{% set x_factor = 1 %}
{% elif current_toolhead == 1 %}
{% set x_start = printable_x_max - 5 %}
{% set x_factor = -1 %}
{% endif %}
{% endif %}
{% endif %}
{% if nozzle_prime_start_y|lower == 'min' %}
{% set y_start = 5 %}
{% elif nozzle_prime_start_y|lower == 'max' %}
{% set y_start = printable_x_max - 5 %}
{% endif %}
{% set z = 10 %}
{% endif %}
{% set start_z_offset = 0 %}
{% set end_z_offset = 0 %}
{% if has_start_offset_t0 %}
{% set start_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %}
{% set end_z_probe_result_t0 = printer["gcode_macro RatOS"].probe_for_priming_end_result|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t0 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t0) ) }
{% endif %}
{% if end_z_probe_result_t0 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t0) ) }
{% endif %}
{% set start_z_offset = start_z_probe_result_t0 %}
{% set end_z_offset = end_z_probe_result_t0 %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if current_toolhead == 1 or both_toolheads or target_idex_mode == "copy" or target_idex_mode == "mirror" %}
{% if has_start_offset_t1 %}
{% set start_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_result_t1|float(9999.9) %}
{% set end_z_probe_result_t1 = printer["gcode_macro RatOS"].probe_for_priming_end_result_t1|float(9999.9) %}
{% if printer.fastconfig.settings.bltouch is not defined and printer.fastconfig.settings.probe is not defined and printer.fastconfig.settings.beacon is not defined %}
{ action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe], [beacon] or [bltouch].") }
{% endif %}
{% if start_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No start probe result found for prime area. This is likely a bug.") }
{% endif %}
{% if end_z_probe_result_t1 == 9999.9 %}
{ action_raise_error("No end probe result found for prime area. This is likely a bug.") }
{% endif %}
{% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %}
{% if start_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (start_z_probe_result_t1) ) }
{% endif %}
{% if end_z_probe_result_t1 < adjustment_threshold %}
{ action_raise_error("Abnormal probe offset detected. Needed offset of %.5f is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area." % (end_z_probe_result_t1) ) }
{% endif %}
{% set start_z_offset = [start_z_offset, start_z_probe_result_t1]|max %}
{% set end_z_offset = [end_z_offset, start_z_probe_result_t1]|max %}
{% endif %}
{% endif %}
{% if target_idex_mode != 'copy' and target_idex_mode != 'mirror' %}
{% if both_toolheads and initial_toolhead != current_toolhead %}
{% set original_start_z_offset = start_z_offset %}
{% set original_end_z_offset = end_z_offset %}
{% set start_z_offset = original_end_z_offset %}
{% set end_z_offset = original_start_z_offset %}
{% endif %}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
DEBUG_ECHO PREFIX="PRIME_BLOB" MSG="x_start: {x_start}, y_start: {y_start}, x_factor: {x_factor}, y_factor: {y_factor}, z: {z}, start_z_offset: {start_z_offset}, end_z_offset: {end_z_offset}"
G90
M83
RATOS_ECHO PREFIX="Priming" MSG="Lifting Z to {z}.."
G0 Z{z} F{z_speed}
{% if printer["dual_carriage"] is not defined %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% if start_print_park_in != 'primeblob' %}
G1 X{x_start} F{speed}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% endif %}
{% else %}
G1 Y{y_start + (15 * y_factor)} F{speed}
{% if target_idex_mode=="copy" or target_idex_mode=="mirror" %}
RATOS_ECHO PREFIX="Priming" MSG="Mirroring move to {x_start}, {y_start} along the edge of the print area.."
_IDEX_MIRROR PRIMING=1
{% else %}
RATOS_ECHO PREFIX="Priming" MSG="Moving to {x_start}, {y_start} along the edge of the print area.."
{% endif %}
G1 X{x_start} F{speed}
{% endif %}
RATOS_ECHO PREFIX="Priming" MSG="Starting prime blob.."
G1 Z{0.5 + start_z_offset} F{z_speed}
G1 Y{y_start} F{speed}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
G1 F300 E{14 / ((0.4 / [nozzle_diameter|float, 0.6]|min) ** 2)}
M106 S{fan_speed}
G1 Z5 F100 E5
G92 E0
RATOS_ECHO PREFIX="Priming" MSG="Bridging with {((fan_speed/255) * 100)|int}% fan speed.."
G1 F3000 X{x_start + (15 * x_factor)} Y{y_start + (15 * y_factor)} E{1 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (20 * x_factor)} Y{y_start + (20 * y_factor)} Z{3.8 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (34 * x_factor)} Y{y_start + (34 * y_factor)} Z{2.6 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (38 * x_factor)} Y{y_start + (38 * y_factor)} Z{1.4 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
G1 F3000 X{x_start + (42 * x_factor)} Y{y_start + (42 * y_factor)} Z{0.2 + end_z_offset} E{0.2 / ((0.4 / nozzle_diameter) ** 2)}
M106 S0
G1 F3000 X{x_start + (46 * x_factor)} Y{y_start + (46 * y_factor)} Z{0.2 + end_z_offset} E0.6
G1 F{speed} X{x_start + (50 * x_factor)} Y{y_start + (50 * y_factor)}
{% if target_idex_mode == "copy" or target_idex_mode == "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if target_idex_mode == "copy" %}
{% if first_y >= 0 %}
_IDEX_COPY DANCE=0 Y={first_y}
{% else %}
_IDEX_COPY DANCE=0 Y={params.Y1}
{% endif %}
{% endif %}
{% if target_idex_mode != "copy" or target_idex_mode != "mirror" %}
RESTORE_GCODE_STATE NAME=prime_blob_state
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="prime_blob"
G92 E0
[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.
variable_ignore_min_extrude_temp = True
gcode =
_LEARN_MORE_FILAMENT
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set filament_name = params._NAME|default('')|string %}
{% set filament_type = params._TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead==0 or toolhead==1 %}
_IDEX_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[gcode_macro _DEFAULT_UNLOAD_FILAMENT]
description = Unload filament macro for non IDEX printers.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading filament..."
DEBUG_ECHO PREFIX="_DEFAULT_UNLOAD_FILAMENT" MSG="TEMP: {temp}"
_LED_UNLOADING_FILAMENT TOOLHEAD=0
SAVE_GCODE_STATE NAME=unload_state
{% if printer.extruder.temperature|int < temp or printer.extruder.can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating extruder to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={temp}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD=0 NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0 AUTOMATED={automated}
{% endif %}
RESTORE_GCODE_STATE NAME=unload_state
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD=0
RATOS_ECHO MSG="Filament unloading completed"
[gcode_macro _IDEX_UNLOAD_FILAMENT]
description = Unload filament macro for IDEX printer.
gcode =
{% set temp = params.TEMP|default(220)|int %}
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set enable_unload_tip_forming = true if printer["gcode_macro RatOS"].enable_unload_tip_forming|default(false)|lower == 'true' else false %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
RATOS_ECHO MSG="Unloading T{toolhead} filament..."
DEBUG_ECHO PREFIX="_IDEX_UNLOAD_FILAMENT" MSG="TEMP: {temp}, TOOLHEAD: {toolhead}"
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
{% if "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set active_extruder = printer.toolhead.extruder %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
{% if not printer.pause_resume.is_paused %}
{% if printer[target_extruder].temperature|int < temp or printer[target_extruder].can_extrude|lower == 'false' %}
RATOS_ECHO MSG="Heating T{toolhead} to {temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={temp}
{% endif %}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={temp}
{% endif %}
G4 P3000
{% if enable_unload_tip_forming %}
_UNLOAD_FILAMENT TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}' AUTOMATED={automated}
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead} AUTOMATED={automated}
{% endif %}
ACTIVATE_EXTRUDER EXTRUDER={active_extruder}
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
RATOS_ECHO MSG="T{toolhead} filament unloading completed"
[gcode_macro _UNLOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead} AUTOMATED={automated}
_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
[gcode_macro _LEGACY_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 =
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% set automated = params.AUTOMATED|default('false')|lower == 'true' %}
{% set unload_speed = 5 * 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 F6000
G0 E-15 F6000
G0 E-{unload_length} F{unload_speed}
_CLEANING_MOVE TOOLHEAD={toolhead} AUTOMATED={automated}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE" MSG="TOOLHEAD: {toolhead}"
RATOS_ECHO MSG="Unloading filament from nozzle to cooling zone... Please wait!"
_PURGE_BEFORE_UNLOAD TOOLHEAD={toolhead}
{% if printer["gcode_macro _UNLOAD_WITHOUT_TIP_FORMING"] is defined %}
_UNLOAD_WITHOUT_TIP_FORMING TOOLHEAD={toolhead} NAME='{filament_name}' TYPE='{filament_type}'
{% else %}
_UNLOAD_WITH_TIP_FORMING NAME='{filament_name}' TYPE='{filament_type}'
{% endif %}
G4 P3000
[gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set extruder_load_speed = printer["gcode_macro T%s" % toolhead].extruder_load_speed|float * 60 %}
{% set extruder_gear_to_cooling_position_distance = printer["gcode_macro T%s" % toolhead].extruder_gear_to_cooling_position_distance|float %}
{% set tooolhead_sensor_to_extruder_gear_distance = printer["gcode_macro T%s" % toolhead].tooolhead_sensor_to_extruder_gear_distance|float %}
DEBUG_ECHO PREFIX="_UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER" MSG="TOOLHEAD: {toolhead}"
G0 E-{extruder_gear_to_cooling_position_distance + tooolhead_sensor_to_extruder_gear_distance + 50} F{extruder_load_speed}
RATOS_ECHO MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[gcode_macro _UNLOAD_WITH_TIP_FORMING]
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
{% if filament_name != '' and filament_type != '' %}
_UNLOAD_KNOWN_FILAMENT NAME={filament_name} TYPE={filament_type}
{% else %}
_UNLOAD_UNKNOWN_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _UNLOAD_KNOWN_FILAMENT]
description = User overrideable tip forming macro if slicer filament profiles are known
gcode =
{% set filament_name = params.NAME|default('')|string %}
{% set filament_type = params.TYPE|default('')|string %}
RATOS_ECHO PREFIX="FILAMENT TYPE" MSG='{filament_type}'
RATOS_ECHO PREFIX="FILAMENT PROFILE" MSG='{filament_name}'
{% if filament_name == "Prusament PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% elif filament_name == "Nobufil PETG @V-Minion" %}
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
{% else %}
RATOS_ECHO PREFIX="_UNLOAD_KNOWN_FILAMENT" MSG="Filament profile not found!"
_UNLOAD_UNKNOWN_FILAMENT
{% endif %}
[gcode_macro _UNLOAD_UNKNOWN_FILAMENT]
description = User overrideable standard tip forming macro
gcode =
DEBUG_ECHO PREFIX="_UNLOAD_UNKNOWN_FILAMENT" MSG="Using standard tip forming macro!"
_TIP_FORMING RETRACT_LENGTH=18 COOLING_MOVE_LENGTH=10
[gcode_macro _TIP_FORMING]
gcode =
{% set cooling_moves = params.COOLING_MOVES|default(4)|int %}
{% set cooling_move_length = params.COOLING_MOVE_LENGTH|default(10)|float %}
{% set start_cooling_speed = params.START_COOLING_SPEED|default(10)|float * 60 %}
{% set end_cooling_speed = params.END_COOLING_SPEED|default(50)|float * 60 %}
{% if cooling_moves == 0 %}
{% set cooling_move_length = 0 %}
{% endif %}
{% set dip = true if params.DIP|default(false)|lower == "true" else false %}
{% set dip_length = params.DIP_LENGTH|default(22)|float %}
{% set dip_speed = params.DIP_SPEED|default(30)|float * 60 %}
{% set dip_retract_speed = params.DIP_RETRACT_SPEED|default(70)|float * 60 %}
{% set retract_length = params.RETRACT_LENGTH|default(18)|float %}
{% set start_retract_speed = params.START_RETRACT_SPEED|default(120)|float * 60 %}
{% set end_retract_speed = params.END_RETRACT_SPEED|default(20)|float * 60 %}
DEBUG_ECHO PREFIX="_TIP_FORMING" MSG="cooling_moves: {cooling_moves}, cooling_move_length: {cooling_move_length}, start_cooling_speed: {start_cooling_speed}, end_cooling_speed: {end_cooling_speed}, dip: {dip}, dip_length: {dip_length}, dip_speed: {dip_speed}, dip_retract_speed: {dip_retract_speed}, retract_length: {retract_length}, start_retract_speed: {start_retract_speed}, end_retract_speed: {end_retract_speed}"
M220 S100
G92 E0
{% set retract = retract_length + cooling_move_length / 2 - 15 %}
G1 E-15 F{start_retract_speed}
G1 E-{0.7 * retract} F{1.0 * end_retract_speed}
G1 E-{0.2 * retract} F{0.5 * end_retract_speed}
G1 E-{0.1 * retract} F{0.3 * end_retract_speed}
G92 E0
{% if cooling_moves > 0 %}
{% set i = (end_cooling_speed - start_cooling_speed) / (2 * cooling_moves - 1) %}
{% for m in range(cooling_moves) %}
G1 E{cooling_move_length} F{(start_cooling_speed + i * m * 2)}
G1 E-{cooling_move_length} F{(start_cooling_speed + i * (m * 2 + 1))}
{% endfor %}
{% endif %}
G92 E0
{% if dip %}
G1 E{dip_length} F{dip_speed}
G4 P100
G1 E-{dip_length} F{dip_retract_speed}
{% endif %}
G92 E0
M400
[delayed_gcode __ON_FILAMENT_SENSOR_BUTTON_PRESSED_STARTUP_GUARD]
initial_duration = 2.
gcode =
SET_GCODE_VARIABLE MACRO=_ON_FILAMENT_SENSOR_BUTTON_PRESSED VARIABLE=startup_complete VALUE=True
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
variable_startup_complete = False
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set toolhead_sensor_button_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_sensor_button_only_when_sensor_enabled|default(false)|lower == 'true' %}
{% if not startup_complete and sensor_enabled %}
{action_emergency_stop("RatOS: The T%s filament sensor button was triggered immediately on printer startup. This is likely a false trigger. Please check your filament sensor wiring and configuration!" % (toolhead,))}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}, SENSOR_ENABLED: {sensor_enabled}, TOOLHEAD_SENSOR_BUTTON_ONLY_WHEN_SENSOR_ENABLED: {toolhead_sensor_button_only_when_sensor_enabled}"
{% if not printer.virtual_sdcard.is_active and (sensor_enabled or not toolhead_sensor_button_only_when_sensor_enabled) %}
UNLOAD_FILAMENT TOOLHEAD={toolhead}
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set sensor_enabled = printer["filament_switch_sensor toolhead_filament_sensor_t%s" % toolhead].enabled|lower == "true" %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
{% set toolhead_detect_clog_only_when_sensor_enabled = printer["gcode_macro T%s" % toolhead].toolhead_detect_clog_only_when_sensor_enabled|default(true)|lower == 'true' %}
DEBUG_ECHO PREFIX="_ON_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}, ENABLE_CLOG_DETECTION: {enable_clog_detection}, TOOLHEAD_DETECT_CLOG_ONLY_WHEN_SENSOR_ENABLED: {toolhead_detect_clog_only_when_sensor_enabled}, SENSOR_ENABLED: {sensor_enabled}"
{% if enable_clog_detection and (sensor_enabled or not toolhead_detect_clog_only_when_sensor_enabled) %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_runout_detection = true if printer["gcode_macro T%s" % toolhead].enable_runout_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_RUNOUT" MSG="TOOLHEAD: {toolhead}"
{% if enable_runout_detection %}
RATOS_ECHO MSG="Filament runout detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set enable_clog_detection = true if printer["gcode_macro T%s" % toolhead].enable_clog_detection|default(true)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_ON_BOWDEN_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
RATOS_ECHO MSG="Filament clog or tangle detected on T{toolhead}!"
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=true
{% endif %}
[gcode_macro _ON_FILAMENT_END]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
{% set clogged = true if params.CLOGGED|default(false)|lower == 'true' else false %}
{% set unload_after_runout = printer["gcode_macro T%s" % toolhead].unload_after_runout|float %}
{% if clogged %}
_LED_FILAMENT_CLOG TOOLHEAD={toolhead}
{% else %}
_LED_FILAMENT_RUNOUT TOOLHEAD={toolhead}
{% endif %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_END" MSG="TOOLHEAD: {toolhead}"
{% if printer.virtual_sdcard.is_active %}
{% if not printer.pause_resume.is_paused %}
PAUSE RUNOUT=True
{% endif %}
{% if not clogged and unload_after_runout %}
UNLOAD_FILAMENT TOOLHEAD={toolhead} AUTOMATED=True
{% endif %}
{% if not clogged and printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true'%}
_JOIN_SPOOL TOOLHEAD={toolhead}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M600]
description = Executes a color change by pausing the printer an unloading the filament.
gcode =
PAUSE
UNLOAD_FILAMENT AUTOMATED=True
RATOS_ECHO MSG="Please load new filament and resume"
[gcode_macro COLD_PULL]
description = Automated hotend cold pull.
gcode =
{% set extrusion_temp = params.EXTRUSION_TEMP|default(220)|int %}
{% set cold_pull_temp = params.COLD_PULL_TEMP|default(80)|int %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% if printer["dual_carriage"] is not defined %}
{% set toolhead = 0 %}
{% else %}
{% if not printer.pause_resume.is_paused %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
{action_raise_error("Unloading filament in Copy or Mirror mode is not supported! Select single mode to proceed.")}
{% else %}
{% set paused_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% if paused_idex_mode == 'copy' or paused_idex_mode == 'mirror' %}
{% set toolhead = params.TOOLHEAD|default(-1)|int %}
{% else %}
{% set toolhead = printer["gcode_macro PAUSE"].idex_toolhead|int %}
{% endif %}
{% endif %}
{% endif %}
{% if toolhead != 0 and toolhead != 1 %}
{action_raise_error("Please select toolhead! 0 = left, 1 = right toolhead")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
RATOS_ECHO MSG="Starting cold pull on T{toolhead}..."
{% else %}
RATOS_ECHO MSG="Starting cold pull..."
{% endif %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if printer["dual_carriage"] is defined and "xyz" not in printer.toolhead.homed_axes %}
_SELECT_TOOL T={toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% set target_extruder = 'extruder%s' % ('' if toolhead == 0 else toolhead) %}
ACTIVATE_EXTRUDER EXTRUDER={target_extruder}
RATOS_ECHO MSG="Heating T{toolhead} to {extrusion_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={extrusion_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={extrusion_temp} MAXIMUM={extrusion_temp + 2}
G4 P3000
RATOS_ECHO MSG="extruding..."
G92 E0
G1 E30 F300
G92 E0
RATOS_ECHO MSG="Cooling T{toolhead} to {cold_pull_temp}C... Please wait."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET={cold_pull_temp}
TEMPERATURE_WAIT SENSOR={target_extruder} MINIMUM={cold_pull_temp} MAXIMUM={cold_pull_temp + 2}
G4 P10000
RATOS_ECHO MSG="cold pull..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-40 VELOCITY=5 ACCEL=100
RATOS_ECHO MSG="eject filament..."
FORCE_MOVE STEPPER={target_extruder} DISTANCE=-200 VELOCITY=20 ACCEL=500
RATOS_ECHO MSG="cooling down extruder..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if toolhead == 0 else 'extruder1'} TARGET=0
RESTORE_GCODE_STATE NAME=cold_pull_state
SAVE_VARIABLE VARIABLE=t{toolhead}_filament VALUE="('""', '""', 0)"
{% if printer["gcode_macro T%s" % toolhead].filament_name is defined and printer["gcode_macro T%s" % toolhead].filament_type is defined and printer["gcode_macro T%s" % toolhead].filament_temp is defined %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=filament_temp VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=T{toolhead} VARIABLE=color VALUE='"{color_unknown}"'
_LED_FILAMENT_UNLOADED TOOLHEAD={toolhead}
CONSOLE_ECHO TITLE="Cold pull complete" MSG="Please remove the filament from the PTFE tube and cut the end off. Do NOT try to load it again." TYPE="warning"
[gcode_macro _USER_START_PRINT_BEFORE_HOMING]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_BED]
gcode =
[gcode_macro _USER_START_PRINT_BED_MESH]
gcode =
[gcode_macro _USER_START_PRINT_PARK]
gcode =
[gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
[gcode_macro _USER_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 =
{% set chamber_heater_bed_temp = printer["gcode_macro RatOS"].chamber_heater_bed_temp|default(115)|int %}
[gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF]
gcode =
[gcode_macro _USER_END_PRINT_PARK]
gcode =
[gcode_macro _USER_END_PRINT_FINISHED]
description = User hook for when the print is finished after gcode state has been restored.
gcode =
[gcode_macro _USER_START_PRINT]
gcode =
[gcode_macro _USER_END_START_PRINT]
gcode =
[gcode_macro _USER_START_FEATURE]
gcode =
[gcode_macro _USER_END_FEATURE]
gcode =
[gcode_macro _USER_BEFORE_IDLE_TIMEOUT]
gcode =
[gcode_macro _USER_AFTER_IDLE_TIMEOUT]
gcode =
[gcode_macro ECHO_T_VARS]
description = Echo Toolhead variables to the console.
gcode =
{% set t = params.T|default(0) %}
RATOS_ECHO MSG="T{t} Variables"
{% for var, value in printer["gcode_macro T%s" % t].items() %}
{action_respond_info(var ~ ": " ~ value)}
{% endfor %}
[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 ENSURE_CRITICAL_RATOS_INIT]
variable_completed = False
gcode =
{% if not completed %}
CALCULATE_PRINTABLE_AREA
SET_GCODE_VARIABLE MACRO=ENSURE_CRITICAL_RATOS_INIT VARIABLE=completed VALUE=True
{% endif %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
{action_respond_info("Initializing RatOS...")}
ENSURE_CRITICAL_RATOS_INIT
_LED_STANDBY
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
{% if printer.fastconfig.settings.beacon is defined %}
_BED_MESH_SANITY_CHECK
{% endif %}
{% set svv = printer.save_variables.variables %}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=0 C={svv.nozzle_expansion_coefficient_t0|default(0.06)|float}
_NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK T=1 C={svv.nozzle_expansion_coefficient_t1|default(0.06)|float}
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=idex_applied_offset
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
ENSURE_CRITICAL_RATOS_INIT
HELLO_RATOS
_ALERT_NON_ZERO_Z_OFFSET
[gcode_macro _ALERT_NON_ZERO_Z_OFFSET]
gcode =
{% set force = params.FORCE|default(0)|int == 1 %}
{% set user_offset = printer.named_offsets.user_probe_z_offset.z|float %}
{% set gcode_offset = printer.gcode_move.homing_origin.z|float %}
{% set combined_offset = user_offset + gcode_offset %}
{% if force or user_offset != 0 or gcode_offset != 0 %}
{% set title = "User-adjusted Z-offset of %.3f mm is active" % combined_offset %}
{% set msg = "" %}
{% set nl = "" %}
{% if user_offset != 0 %}
{% set msg = msg + "beacon true zero user Z-offset: %.3f mm (to clear, use Z_OFFSET_APPLY_PROBE CLEAR=1)" % user_offset %}
{% set nl = "_N_" %}
{% endif %}
{% if gcode_offset != 0 %}
{% set msg = msg + nl + "G-code Z-offset: %.3f mm" % gcode_offset %}
{% endif %}
CONSOLE_ECHO TITLE="{title}" TYPE="info" MSG="{msg}"
{% endif %}
[gcode_macro _INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE]
gcode =
{% set variable = params.VARIABLE|string %}
{% set svv = printer.save_variables.variables %}
{% set nlu_msg = "no longer used, please remove" %}
{% if svv[variable] is defined %}
{% set v = svv[variable]|string|replace('"', '')|replace("'", "") %}
{% if not nlu_msg in v %}
SAVE_VARIABLE VARIABLE={variable} VALUE='"{nlu_msg} (was {v})"'
{% endif %}
CONSOLE_ECHO TITLE="Deprecated ratos-variables.cfg variable" TYPE="warning" MSG="The variable {variable} is no longer used, please remove it from your ratos-variables.cfg file."
{% endif %}
[gcode_macro _NOZZLE_EXPANSION_COEFFICIENT_SANITY_CHECK]
gcode =
{% set t = params.T|int %}
{% set c = params.C|float %}
{% set normal_low = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_low|default(0.05)|float %}
{% set normal_high = printer["gcode_macro RatOS"].sanity_check_nozzle_expansion_coefficient_high|default(0.10)|float %}
{% if c < 0 %}
{action_emergency_stop("Invalid nozzle_expansion_coefficient_t%s value in ratos-variables.cfg: %.3f. It must be non-negative." % (t, c))}
{% endif %}
{% if c >= normal_high %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite high. Please verify that this is correct."
{% endif %}
{% if c <= normal_low %}
CONSOLE_ECHO TITLE="Suspicious nozzle expansion coefficient for T{t} value" TYPE="warning" MSG="The nozzle_expansion_coefficient_t{t} value in ratos-variables.cfg is {c|round(3)}, which is quite low. Please verify that this is correct."
{% endif %}
[gcode_macro INITIAL_FRONTEND_UPDATE]
gcode =
{% set color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_error = printer["gcode_macro RatOS"].status_color_error|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_unknown}"'
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_unknown}"'
{% endif %}
{% set t0_sensor = "undefined" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t0"].filament_detected|lower == "true" %}
{% set t0_sensor = "detected" %}
{% else %}
{% set t0_sensor = "empty" %}
{% endif %}
{% else %}
{% set t0_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set t1_sensor = "undefined" %}
{% if printer["dual_carriage"] is defined and printer["filament_switch_sensor toolhead_filament_sensor_t1"] is defined %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t1"].filament_detected|lower == "true" %}
{% set t1_sensor = "detected" %}
{% else %}
{% set t1_sensor = "empty" %}
{% endif %}
{% else %}
{% set t1_sensor = "disabled" %}
{% endif %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% if svv.t0_filament is defined and printer["gcode_macro T0"] is defined %}
{% if printer["gcode_macro T0"].filament_name is defined and printer["gcode_macro T0"].filament_type is defined and printer["gcode_macro T0"].filament_temp is defined %}
{% if t0_sensor != "empty" %}
{% set t0_filament_type = svv.t0_filament[0]|default('')|string %}
{% set t0_filament_name = svv.t0_filament[1]|default('')|string %}
{% set t0_filament_temp = svv.t0_filament[2]|default(0)|float %}
{% if t0_filament_name != '' and t0_filament_type != '' and t0_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='"{t0_filament_name}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='"{t0_filament_type}"'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE={t0_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t0_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
{% if svv.t1_filament is defined and printer["gcode_macro T1"] is defined %}
{% if printer["gcode_macro T1"].filament_name is defined and printer["gcode_macro T1"].filament_type is defined and printer["gcode_macro T1"].filament_temp is defined %}
{% if t1_sensor != "empty" %}
{% set t1_filament_type = svv.t1_filament[0]|default('')|string %}
{% set t1_filament_name = svv.t1_filament[1]|default('')|string %}
{% set t1_filament_temp = svv.t1_filament[2]|default(0)|float %}
{% if t1_filament_name != '' and t1_filament_type != '' and t1_filament_temp > 0 %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=color VALUE='"{color_ok}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='"{t1_filament_name}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='"{t1_filament_type}"'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE={t1_filament_temp}
{% endif %}
{% else %}
SAVE_VARIABLE VARIABLE=t1_filament VALUE="('""', '""', 0)"
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_name VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_type VALUE='""'
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=filament_temp VALUE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro CALCULATE_PRINTABLE_AREA]
variable_calculated = False
gcode =
{% if not calculated %}
{% set bed_margin_x = printer["gcode_macro RatOS"].bed_margin_x %}
{% set bed_margin_y = printer["gcode_macro RatOS"].bed_margin_y %}
{% set tool = 0 if printer["gcode_macro T0"] is not defined or printer["gcode_macro T0"].active else 1 %}
{% set max_x = printer.toolhead.axis_maximum.x if printer["dual_carriage"] is defined and tool == 0 else printer.toolhead.axis_maximum.x - bed_margin_x[1] %}
{% if printer["dual_carriage"] is defined %}
{% set max_x = printer.toolhead.axis_maximum.x %}
{% endif %}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="printer.toolhead.axis_maximum.x {printer.toolhead.axis_maximum.x}"
{% set max_y = printer.toolhead.axis_maximum.y - bed_margin_y[1]%}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_x_max VALUE={max_x}
SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=printable_y_max VALUE={max_y}
SET_GCODE_VARIABLE MACRO=CALCULATE_PRINTABLE_AREA VARIABLE=calculated VALUE=True
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
RATOS_LOG PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
{% endif %}
[gcode_macro CACHE_TOOLHEAD_SETTINGS]
variable_cache = {"global": {"accel": 1000, "ratio": 0.5, "speed": 50, "scv": 5}}
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set dummy = cache.__setitem__(key, {"accel": printer.toolhead.max_accel, "ratio": printer.toolhead.minimum_cruise_ratio, "speed": printer.toolhead.max_velocity, "scv": printer.toolhead.square_corner_velocity}) %}
SET_GCODE_VARIABLE MACRO=CACHE_TOOLHEAD_SETTINGS VARIABLE=cache VALUE="{cache | pprint | replace("\n", "") | replace("\"", "\\\"")}"
DEBUG_ECHO PREFIX="CACHE_TOOLHEAD_SETTINGS" MSG="Toolhead settings cached for {key}. {printer.toolhead.max_accel} accel, {printer.toolhead.minimum_cruise_ratio} ratio, {printer.toolhead.max_velocity} velocity, {printer.toolhead.square_corner_velocity} scv."
[gcode_macro RESTORE_TOOLHEAD_SETTINGS]
gcode =
{% set key = "global" %}
{% if params.KEY is defined %}
{% set key = params.KEY %}
{% endif %}
{% set values = printer["gcode_macro CACHE_TOOLHEAD_SETTINGS"].cache.__getitem__(key) %}
{% if values is not defined or values == 'None' %}
{ action_raise_error("RESTORE_TOOLHEAD_SETTINGS: Toolhead settings not cached for key '" ~ key ~ "'.") }
{% endif %}
SET_VELOCITY_LIMIT ACCEL={values.accel} MINIMUM_CRUISE_RATIO={values.ratio} VELOCITY={values.speed} SQUARE_CORNER_VELOCITY={values.scv}
DEBUG_ECHO PREFIX="RESTORE_TOOLHEAD_SETTINGS" MSG="Toolhead settings restored. {values.accel} accel, {values.ratio} ratio, {values.speed} velocity, {values.scv} scv."
[gcode_macro SET_MACRO_TRAVEL_SETTINGS]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float %}
{% set accel = printer["gcode_macro RatOS"].macro_travel_accel %}
SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0.5 VELOCITY={speed} SQUARE_CORNER_VELOCITY={5}
DEBUG_ECHO PREFIX="SET_MACRO_TRAVEL_SETTINGS" MSG="Macro travel settings set. {accel} accel, {speed} velocity"
[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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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
{% if printer["dual_carriage"] is not defined %}
SET_KINEMATIC_POSITION X={printable_x_max / 2} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
{% else %}
IDEX_SET_CENTER_KINEMATIC_POSITION
{% endif %}
[gcode_macro IDEX_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 =
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
RATOS_ECHO 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 printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set center_x = printable_x_max / 2 %}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x - (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
SET_KINEMATIC_POSITION X={center_x + (center_x / 2)} Y={printable_y_max / 2} Z={printer.toolhead.axis_maximum.z / 2}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
[gcode_macro VERIFY_HYBRID_INVERTED]
gcode =
{% set inverted = False %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy is defined and printer.fastconfig.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.fastconfig.settings.ratos_hybrid_corexy.inverted|lower == 'true' %}
{% set inverted = True %}
{% endif %}
{% endif %}
{% if inverted == False %}
{ action_emergency_stop("ratos_hybrid_corexy NOT INVERTED! Inverted hybrid core-xy bugfix not detected.") }
{% endif %}
[gcode_macro RATOS_ECHO]
gcode =
{% set prefix = "RatOS" %}
{% set debug = params.DEBUG|default(0)|int %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " | " ~ params.PREFIX %}
{% endif %}
{% set prefix = prefix ~ ":" %}
{% set msg = "" %}
{% if params.MSG is defined %}
{% set msg = params.MSG %}
{% else %}
{% set msg = "No msg parameter provided (this is a bug or unintended use)." %}
{% endif %}
{% if not debug %}
M117 {prefix} {msg}
{% endif %}
RATOS_LOG PREFIX="{prefix}" MSG="{msg}"
{% if not debug %}
RESPOND PREFIX="{prefix}" MSG="{msg}"
{% else %}
CONSOLE_ECHO TITLE="{prefix}" TYPE="debug" MSG="{msg}"
{% endif %}
[gcode_macro ENABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=True
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=prefix_filter VALUE="'{params.FILTER|default('')|lower}'"
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging enabled."
[gcode_macro DISABLE_DEBUG]
gcode =
SET_GCODE_VARIABLE MACRO=DEBUG_ECHO VARIABLE=enabled VALUE=False
RATOS_ECHO PREFIX="DEBUG" MSG="Debugging disabled."
[gcode_macro DEBUG_ECHO]
variable_enabled = False
variable_prefix_filter = ''
gcode =
{% set prefix = "DEBUG" %}
{% if params.PREFIX is defined %}
{% set prefix = prefix ~ " - " ~ params.PREFIX %}
{% endif %}
{% if enabled and (prefix_filter|lower == '' or prefix_filter|lower in params.PREFIX|lower) %}
RATOS_ECHO PREFIX="{prefix}" MSG="{params.MSG}" DEBUG=1
{% endif %}
[gcode_macro START_FEATURE]
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="Start {params.FEATURE} feature gcode"
{% set scv = printer.toolhead.square_corner_velocity|int|default(5) %}
{% set accel = printer.toolhead.max_accel|int|default(10000) %}
{% set ratio = printer.toolhead.minimum_cruise_ratio|float|default(0.5) %}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="scv" VALUE={scv}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="accel" VALUE={accel}
SET_GCODE_VARIABLE MACRO="END_FEATURE" VARIABLE="ratio" VALUE={ratio}
_USER_START_FEATURE FEATURE="{params.FEATURE}"
[gcode_macro END_FEATURE]
variable_scv = 5
variable_accel = 10000
variable_ratio = 0.5
gcode =
DEBUG_ECHO PREFIX="G-Code" MSG="End {params.FEATURE} feature gcode"
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={scv} ACCEL={accel} MINIMUM_CRUISE_RATIO={ratio}
_USER_END_FEATURE FEATURE="{params.FEATURE}" SCV={scv} ACCEL={accel} RATIO={ratio}
[gcode_macro _ON_LAYER_CHANGE]
variable_layer_number = 0
description = INTERNAL USE ONLY. Call it from the slicers after layer change custom gcode
gcode =
{% set layer = params.LAYER|int %}
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE={layer}
SET_PRINT_STATS_INFO CURRENT_LAYER={layer}
[gcode_macro _LEARN_MORE_CALIBRATION]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/calibration" %}
{% set link_text = "RatOS Calibration Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_CHAMBER_FILTER]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/chamber_filter" %}
{% set link_text = "RatOS Chamber Filter Control" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _LEARN_MORE_FILAMENT]
gcode =
{% set link_url = "https://os.ratrig.com/docs/configuration/filaments" %}
{% set link_text = "RatOS Filament Macros" %}
{% set line_1 = '"Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="INFO" MSG={line_1}
[gcode_macro _CONSOLE_SAVE_CONFIG]
gcode =
M118 Click SAVE_CONFIG to save the settings to your printer.cfg.
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.fastconfig.config["skew_correction %s" % ratos_skew_profile] is defined %}
SKEW_PROFILE LOAD={ratos_skew_profile}
GET_CURRENT_SKEW
{% else %}
{% set line_1 = '"Could not find skew profile %s!_N_Clearing skew correction."' % ratos_skew_profile %}
CONSOLE_ECHO TITLE="Missing skew profile!" TYPE="warning" MSG={line_1}
SET_SKEW CLEAR=1
{% endif %}
{% endif %}
[gcode_macro M601]
gcode =
PAUSE
[gcode_macro _STOP_AND_RAISE_ERROR]
gcode =
M84
_RAISE_ERROR MSG="{params.MSG}"
[gcode_macro PAUSE]
description = Pauses the print
rename_existing = PAUSE_BASE
variable_extrude = 1.5
variable_retract = 1.5
variable_fan_speed = 0
variable_idex_mode = ""
variable_idex_toolhead = 0
variable_idex_toolhead_x = 0.0
variable_idex_toolhead_y = 0.0
variable_idex_toolhead_z = 0.0
gcode =
RATOS_ECHO MSG="Pausing print..."
{% set runout_detected = true if params.RUNOUT|default(false)|lower == 'true' else false %}
_LED_PAUSE
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
SAVE_GCODE_STATE NAME=PAUSE_state
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_mode VALUE='"{idex_mode}"'
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead VALUE={idex_toolhead}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_x VALUE={printer.gcode_move.gcode_position.x|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_y VALUE={printer.gcode_move.gcode_position.y|float}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=idex_toolhead_z VALUE={printer.gcode_move.gcode_position.z|float}
DEBUG_ECHO PREFIX="PAUSE" MSG="idex_mode: {idex_mode}, idex_toolhead: {idex_toolhead}, idex_toolhead_x: {idex_toolhead_x}, idex_toolhead_y: {idex_toolhead_y}, idex_toolhead_z: {idex_toolhead_z}"
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
CACHE_TOOLHEAD_SETTINGS KEY="pause"
SET_MACRO_TRAVEL_SETTINGS
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% if current_z < (max_z - 20.0) %}
{% set z_safe = 20.0 %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
PAUSE_BASE
{% if printer["dual_carriage"] is not defined %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan"].speed|float}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
{% if idex_toolhead == 0 %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t0"].speed|float}
{% else %}
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=fan_speed VALUE={printer["fan_generic part_fan_t1"].speed|float}
{% endif %}
{% endif %}
{% endif %}
M106 S0
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set R = printer["gcode_macro PAUSE"].retract|float %}
{% if can_extrude %}
G91
G1 E-{R} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].pause_print_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].pause_print_park_in %}
{% if runout_detected %}
{% set pause_print_park_x = printer["gcode_macro RatOS"].runout_park_x %}
{% set pause_print_park_in = printer["gcode_macro RatOS"].runout_park_in %}
{% endif %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
DEBUG_ECHO PREFIX="PAUSE" MSG="z_speed: {z_speed}, pause_print_park_x: {pause_print_park_x}, pause_print_park_in: {pause_print_park_in}, default_toolhead: {default_toolhead}"
{% if "xyz" in printer.toolhead.homed_axes %}
G91
G1 Z{z_safe} F{z_speed}
G90
{% if printer["dual_carriage"] is not defined %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% else %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
_IDEX_SINGLE X={parking_position}
{% else %}
PARK_TOOLHEAD
{% endif %}
_PARK LOCATION={pause_print_park_in} X={pause_print_park_x}
{% endif %}
{% else %}
{action_respond_info("Printer not homed")}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="pause"
RATOS_ECHO MSG="Print paused"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
RATOS_ECHO MSG="Resuming print..."
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set target_idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set target_idex_mode = printer["gcode_macro PAUSE"].idex_mode|lower %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if target_idex_mode != '' %}
{% if target_idex_mode == 'copy' or target_idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
{% set fan_speed = printer["gcode_macro PAUSE"].fan_speed|float %}
{% if printer["dual_carriage"] is not defined %}
M106 S{(fan_speed * 255)}
{% else %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% else %}
{% if params.TOOLHEAD is defined %}
{% if params.TOOLHEAD == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% else %}
{% if printer["gcode_macro PAUSE"].idex_toolhead == 0 %}
SET_FAN_SPEED FAN=part_fan_t0 SPEED={fan_speed}
{% else %}
SET_FAN_SPEED FAN=part_fan_t1 SPEED={fan_speed}
{% endif %}
{% endif %}
{% endif %}
M106.1 S{fan_speed}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% if target_idex_mode == "copy" %}
_IDEX_COPY DANCE=0
{% elif target_idex_mode == "mirror" %}
_IDEX_MIRROR DANCE=0
{% else %}
{% if params.TOOLHEAD is defined %}
_SELECT_TOOL T={params.TOOLHEAD} X=-1 Y=-1 TOOLSHIFT=false
{% else %}
_SELECT_TOOL T={printer["gcode_macro PAUSE"].idex_toolhead} X=-1 Y=-1 TOOLSHIFT=false
{% endif %}
{% endif %}
{% set x = printer["gcode_macro PAUSE"].idex_toolhead_x|float %}
{% set y = printer["gcode_macro PAUSE"].idex_toolhead_y|float %}
{% set z = printer["gcode_macro PAUSE"].idex_toolhead_z|float %}
G1 X{x} Y{y} Z{z} F{speed}
{% if params.TOOLHEAD is defined %}
SAVE_GCODE_STATE NAME=PAUSE_STATE
{% endif %}
{% endif %}
{% if params.TOOLHEAD is not defined %}
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
{% if can_extrude %}
G91
G1 E{E} F2100
G90
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is not defined %}
RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 MOVE_SPEED={speed}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
RESUME_BASE
_LED_PRINTING
RATOS_ECHO MSG="Print resumed"
[gcode_macro CANCEL_PRINT]
description = Cancels the print
rename_existing = CANCEL_PRINT_BASE
gcode =
RATOS_ECHO MSG="Cancelling print..."
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
RATOS_ECHO MSG="Print cancelled"
[gcode_macro START_PRINT]
description = Start print procedure, use this in your Slicer.
variable_post_processor_version = 2
variable_is_printing_gcode = False
variable_both_toolheads = True
variable_object_xoffset = 0
variable_first_x = -1
variable_first_y = -1
variable_total_toolshifts = 0
variable_initial_tool = 0
variable_extruder_first_layer_temp = ""
variable_extruder_other_layer_temp = ""
gcode =
{% if params.EXTRUDER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_TEMP parameter not found.")}
{% endif %}
{% if params.EXTRUDER_OTHER_LAYER_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. EXTRUDER_OTHER_LAYER_TEMP parameter not found.")}
{% endif %}
{% if params.BED_TEMP is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Missing START_PRINT parameter. BED_TEMP parameter not found.")}
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' and printer["gcode_macro RatOS"].danger_force_allow_auto_center_subject|default(false)|lower != 'true'%}
{ action_raise_error("The experimental auto_center_subject feature is not supported in this version of RatOS. Please disable it in the RatOS macro settings.") }
{% endif %}
{% if "xyz" in printer.toolhead.homed_axes and printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% if printer["gcode_macro _VAOC"].is_started|default(true)|lower == 'true' %}
_VAOC_END
{% endif %}
{% endif %}
_LED_START_PRINTING
CACHE_TOOLHEAD_SETTINGS KEY="start_print"
_USER_START_PRINT { rawparams }
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_probe_stowable = printer["gcode_macro RatOS"].z_probe|lower == 'stowable' %}
{% if printer["dual_carriage"] is defined %}
{% set toolchange_standby_temp = printer["gcode_macro RatOS"].toolchange_standby_temp|default(-1)|float %}
{% endif %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
{% set X0 = params.X0|default(-1)|float %}
{% set X1 = params.X1|default(-1)|float %}
{% set Y0 = params.Y0|default(-1)|float %}
{% set Y1 = params.Y1|default(-1)|float %}
{% if first_x == -1 or first_y == -1 %}
{% set first_x = params.FIRST_X|default(-1)|float %}
{% set first_y = params.FIRST_Y|default(-1)|float %}
{% endif %}
{% set total_toolshifts = params.TOTAL_TOOLSHIFTS|default(0)|int %}
{% set initial_tool = params.INITIAL_TOOL|default(default_toolhead)|int %}
{% set start_chamber_temp = params.START_CHAMBER_TEMP|default(0)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set bed_temp = params.BED_TEMP|default(printer.heater_bed.target, true)|float %}
{% set total_layer_count = params.TOTAL_LAYER_COUNT|default(0)|int %}
{% set extruder_first_layer_temp = (params.EXTRUDER_TEMP|default("")).split(",") %}
{% if printer.fastconfig.settings.beacon is defined %}
_START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL BEACON_CONTACT_START_PRINT_TRUE_ZERO={beacon_contact_start_print_true_zero} BEACON_CONTACT_CALIBRATE_MODEL_ON_TRUE_ZERO={beacon_contact_calibrate_model_on_true_zero}
{% endif %}
_START_PRINT_PREFLIGHT_CHECK_AND_RESET_BED_MESH BED_TEMP={bed_temp}
RATOS_ECHO MSG="First print coordinates X:{first_x} Y:{first_y}"
{% if params.TOTAL_LAYER_COUNT is not defined %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Configuration" %}
{% set line_1 = '"Your slicer gcode settings are not up to date._N_Learn more about the %s"' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Incomplete Slicer Configuration detected" TYPE="warning" MSG={line_1}
{% endif %}
SET_PRINT_STATS_INFO CURRENT_LAYER=1
SET_GCODE_VARIABLE MACRO=_ON_LAYER_CHANGE VARIABLE=layer_number VALUE=1
{% if total_layer_count > 0 %}
SET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set swap_toolheads = true if printer["gcode_macro _IDEX_REMAP_TOOLHEADS"].enabled|default(false)|lower == 'true' else false %}
{% if swap_toolheads %}
{% set initial_tool = 0 if initial_tool == 1 else 1 %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=active VALUE=True
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=active VALUE=True
{% endif %}
{% set both_toolheads = true %}
{% if total_toolshifts == 0 %}
{% set both_toolheads = false %}
{% endif %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set parking_position = printer["gcode_macro T%s" % default_toolhead].parking_position|float %}
_IDEX_SINGLE X={parking_position}
{% endif %}
{% if both_toolheads and (idex_mode == "copy" or idex_mode == "mirror") %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Gcode tool changes found. Copy and mirror mode do not support toolchanges.")}
{% endif %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% set both_toolheads = true %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=initial_tool VALUE={initial_tool}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_x VALUE={first_x}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=first_y VALUE={first_y}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=total_toolshifts VALUE={total_toolshifts}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=both_toolheads VALUE={both_toolheads}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_first_layer_temp VALUE="'{params.EXTRUDER_TEMP}'"
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=extruder_other_layer_temp VALUE="'{params.EXTRUDER_OTHER_LAYER_TEMP}'"
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_TOOLCHANGE VARIABLE=toolshift_count VALUE=0
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set svv = printer.save_variables.variables %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
{% set stepper_x_position_min = printer.fastconfig.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.fastconfig.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.fastconfig.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.fastconfig.settings.dual_carriage.position_endstop|float %}
{% set x_parking_space = parking_position_t0 - (stepper_x_position_endstop , stepper_x_position_min)|max %}
{% set dc_parking_space = (dual_carriage_position_endstop , dual_carriage_position_max)|min - parking_position_t1 %}
{% if svv.idex_xoffset|abs >= (x_parking_space - 0.5) or svv.idex_xoffset|abs >= (dc_parking_space - 0.5) %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Toolhead x-offset is too high for the available parking space. Calibrate your X and DC endstop positions and make sure you stay below 1mm." % (copy_mode_max_width)) }
{% endif %}
{% endif %}
{% if (idex_mode == "copy" or idex_mode == "mirror") and printer.fastconfig.settings.ratos.enable_gcode_transform %}
{% if params.MIN_X is not defined or params.MAX_X is not defined %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Something went wrong! Missing important post processor start print parameter!") }
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE=0
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set boundary_box_min_x = params.MIN_X|default(0)|float %}
{% set boundary_box_max_x = params.MAX_X|default(printable_x_max)|float %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
{% set boundary_box_max_x = boundary_box_max_x + svv.idex_xoffset %}
{% else %}
{% set boundary_box_min_x = boundary_box_min_x - svv.idex_xoffset %}
{% endif %}
{% set center_x = printable_x_max / 2.0 %}
{% set safe_distance = printer.fastconfig.settings.dual_carriage.safe_distance|float %}
{% set object_width = boundary_box_max_x - boundary_box_min_x %}
{% set copy_mode_max_width = center_x %}
{% set mirror_mode_max_width = center_x - safe_distance / 2.0 %}
DEBUG_ECHO PREFIX="START_PRINT" MSG="OBJECT_WIDTH: {object_width} BOUNDARY_BOX_MIN_X: {boundary_box_min_x} BOUNDARY_BOX_MAX_X: {boundary_box_max_x} CENTER_X: {center_x} SAFE_DISTANCE: {safe_distance}"
{% if idex_mode == "copy" and object_width > copy_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for copy mode! Max supported width is %s mm" % (copy_mode_max_width)) }
{% endif %}
{% if idex_mode == "mirror" and object_width > mirror_mode_max_width %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Object is too big for mirror mode! Max supported width is %s mm" % (mirror_mode_max_width)) }
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = (printable_x_max - boundary_box_max_x - boundary_box_min_x) / 2 %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=object_xoffset VALUE={object_xoffset}
{% endif %}
{% endif %}
{% set has_initial_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_initial_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool] is defined else false %}
{% if has_initial_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % initial_tool].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (initial_tool)) }
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined and both_toolheads %}
{% set has_secondary_toolhead_filament_sensor = true if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_toolhead_filament_sensor %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor toolhead_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s filament sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% set has_secondary_bowden_filament_sensor = true if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)] is defined else false %}
{% if has_secondary_bowden_filament_sensor %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].enabled|lower == "true" %}
{% if printer["filament_switch_sensor bowden_filament_sensor_t%s" % (1 if initial_tool == 0 else 0)].filament_detected|lower != "true" %}
_LED_START_PRINTING_ERROR
{ action_raise_error("Filament not detected! Toolhead T%s bowden sensor is empty." % (1 if initial_tool == 0 else 0)) }
{% endif %}
{% endif %}
{% endif %}
{% endif %}
_CHAMBER_FILTER_ON AT="before_print_start"
{% if printer["dual_carriage"] is defined %}
{% if printer["gcode_macro _IDEX_JOIN_SPOOLS"].enabled|default(false)|lower == 'true' %}
{% if both_toolheads %}
RATOS_ECHO MSG="Spool join is not possible if both toolheads are in use!"
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% endif %}
{% endif %}
{% endif %}
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
CLEAR_PAUSE
{% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %}
G90
{% endif %}
SAVE_GCODE_STATE NAME=start_print_state
G21
G90
M82
_USER_START_PRINT_BEFORE_HOMING { rawparams }
{% if z_probe_stowable == true %}
STOWABLE_PROBE_BEGIN_BATCH
{% endif %}
MAYBE_HOME
_Z_HOP
{% if idex_mode != '' and not (printer.fastconfig.settings.beacon is defined and (beacon_contact_start_print_true_zero or beacon_adaptive_heat_soak)) %}
PARK_TOOLHEAD
{% endif %}
{% if chamber_temp > 0 %}
{% if printer["fan_generic filter"] is defined %}
{% if printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float > 0 %}
SET_FAN_SPEED FAN=filter SPEED={printer["gcode_macro RatOS"].chamber_heater_filter_fan_speed|default(0)|float}
{% endif %}
{% endif %}
_CHAMBER_HEATER_ON START_CHAMBER_TEMP={start_chamber_temp} CHAMBER_TEMP={chamber_temp}
_USER_START_PRINT_HEAT_CHAMBER { rawparams } CHAMBER_TEMP={chamber_temp}
{% endif %}
_START_PRINT_BEFORE_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
RATOS_ECHO MSG="Heating bed..."
M190 S{bed_temp}
{% if printer.fastconfig.settings.beacon is defined and beacon_adaptive_heat_soak %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK LAYER_QUALITY={beacon_adaptive_heat_soak_layer_quality} MAXIMUM_FIRST_LAYER_DURATION={beacon_adaptive_heat_soak_maximum_first_layer_duration} MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={beacon_adaptive_heat_soak_max_wait}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_BED { rawparams }
_START_PRINT_AFTER_HEATING_BED T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
_USER_START_PRINT_BED_MESH { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_BED_MESH X0={X0} X1={X1} Y0={Y0} Y1={Y1} T={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if z_probe_stowable == true %}
STOWABLE_PROBE_END_BATCH
{% endif %}
{% if idex_mode == '' %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[initial_tool]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={extruder_first_layer_temp[0]|float}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={extruder_first_layer_temp[1]|float}
{% endif %}
{% endif %}
_USER_START_PRINT_PARK { rawparams }
_START_PRINT_PARK
RATOS_ECHO MSG="Heating Extruder..."
{% if idex_mode == '' %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[initial_tool]|float} MAXIMUM={extruder_first_layer_temp[initial_tool]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={extruder_first_layer_temp[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% endif %}
{% if initial_tool == 1 or both_toolheads or (default_toolhead == 1 and printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
TEMPERATURE_WAIT SENSOR="extruder1" MINIMUM={extruder_first_layer_temp[1]|float} MAXIMUM={extruder_first_layer_temp[1]|float + 5}
{% endif %}
{% endif %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% if idex_mode == '' %}
_LED_PRINTING
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
_LED_PRINTING
{% else %}
{% if both_toolheads %}
_LED_PRINTING TOOLHEAD={initial_tool}
{% if toolchange_standby_temp > -1 %}
_LED_TOOLHEAD_STANDBY TOOLHEAD={0 if initial_tool == 1 else 1}
{% else %}
_LED_PRINTING TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% else %}
_LED_PRINTING TOOLHEAD={initial_tool}
_LED_DEACTIVATE_TOOLHEAD TOOLHEAD={0 if initial_tool == 1 else 1}
{% endif %}
{% endif %}
{% endif %}
_USER_START_PRINT_AFTER_HEATING_EXTRUDER { rawparams } X0={X0} X1={X1} Y0={Y0} Y1={Y1}
_START_PRINT_AFTER_HEATING_EXTRUDER X0={X0} X1={X1} Y0={Y0} Y1={Y1} INITIAL_TOOLHEAD={initial_tool} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode}
{% if idex_mode != '' %}
{% if not both_toolheads %}
{% if initial_tool != default_toolhead %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
SET_GCODE_VARIABLE MACRO=T0 VARIABLE=standby VALUE=False
SET_GCODE_VARIABLE MACRO=T1 VARIABLE=standby VALUE=False
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if toolchange_standby_temp > -1 %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if initial_tool == 1 else 'extruder1'} TARGET={toolchange_standby_temp}
SET_GCODE_VARIABLE MACRO=T{0 if initial_tool == 1 else 1} VARIABLE=standby VALUE=True
{% endif %}
{% endif %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if printer["dual_carriage"] is defined %}
_SET_IDEX_MODE_OFFSET
{% endif %}
{% if idex_mode != '' %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
{% if idex_mode == "copy" and idex_mode != act_idex_mode %}
_IDEX_COPY DANCE=0
{% elif idex_mode == "mirror" and idex_mode != act_idex_mode %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
RATOS_ECHO MSG="Adjusting object x-offset by {(object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={object_xoffset} MOVE=0
{% endif %}
{% else %}
_SELECT_TOOL T={initial_tool} TOOLSHIFT=false
_SET_TOOLHEAD_OFFSET
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET
{% endif %}
_SET_EXTRUSION_MODE
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=True
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
SET_GCODE_VARIABLE MACRO=_SELECT_TOOL VARIABLE=last_timestamp VALUE={printer["print_stats"].print_duration}
{% endif %}
_USER_END_START_PRINT { rawparams }
G92 E0
_CHAMBER_FILTER_ON AT="after_print_start"
_ALERT_NON_ZERO_Z_OFFSET
RATOS_ECHO MSG="Printing..."
[gcode_macro _START_PRINT_BEFORE_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% endif %}
{% set act_t = 1 if idex_mode == 'primary' else 0 %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set is_stowable_probe = true if printer["gcode_macro RatOS"].z_probe|lower == 'stowable' else false %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Pre-heating extruder..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
SET_HEATER_TEMPERATURE HEATER="extruder1" TARGET={min_temp}
{% else %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET={min_temp}
{% endif %}
{% else %}
SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={min_temp}
{% endif %}
{% endif %}
{% if not is_stowable_probe %}
{% if printer["dual_carriage"] is defined and act_t != default_toolhead %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
{% endif %}
RATOS_ECHO MSG="Heat soaking z probe..."
_MOVE_TO_SAFE_Z_HOME
G0 Z2 F{z_speed}
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED]
gcode =
{% set target_idex_mode = params.IDEX_MODE|default("")|lower %}
{% set initial_toolhead = params.T|default(default_toolhead)|int %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %}
{% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set auto_z_offset_calibration = False %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro _VAOC"] is defined %}
{% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %}
{% if printer["gcode_macro _VAOC"].auto_z_offset_calibration|default("false")|lower == 'true' and is_fixed %}
{% if target_idex_mode != "copy" and target_idex_mode != "mirror" %}
{% if both_toolheads or initial_toolhead != default_toolhead %}
{% set auto_z_offset_calibration = True %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %}
RATOS_ECHO MSG="Waiting for extruder to be preheated..."
{% if printer["dual_carriage"] is defined %}
{% if auto_z_offset_calibration %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
{% if default_toolhead == 0 %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder1 MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% else %}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp}
{% endif %}
{% endif %}
{% if printer.fastconfig.settings.beacon is defined %}
_Z_HOP
{% endif %}
{% if auto_z_offset_calibration %}
{% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %}
{% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %}
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=True
PARK_TOOLHEAD
_CLEANING_MOVE TOOLHEAD={default_toolhead} AUTOMATED=True
_SELECT_TOOL T={0 if default_toolhead == 1 else 1} X={parking_position_t0 if default_toolhead == 1 else parking_position_t1} Y=0 TOOLSHIFT=false
_CLEANING_MOVE TOOLHEAD={0 if default_toolhead == 1 else 1} AUTOMATED=True
_VAOC_CALIBRATE_Z_OFFSET AUTO_Z_OFFSET=True
_SELECT_TOOL T={default_toolhead} X={safe_home_x} Y={safe_home_y} TOOLSHIFT=false
{% endif %}
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
{% if needs_rehoming %}
G28 Z
{% endif %}
{% if printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% endif %}
{% endif %}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE
{% endif %}
[gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
PROBE PROBE_METHOD=contact SAMPLES=1
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE]
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_wipe_before_true_zero_method = printer["gcode_macro RatOS"].beacon_contact_wipe_before_true_zero_method|default("probe_clean")|lower %}
{% set beacon_contact_calibrate_model_on_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero_fuzzy_position = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_position|default(false)|lower == 'true' else false %}
{% set fuzzy_radius = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero_fuzzy_radius|default(0)|float if beacon_contact_start_print_true_zero_fuzzy_position else 0 %}
{% set contact_true_zero_temp_has_been_set = False %}
{% if beacon_contact_wipe_before_true_zero %}
{% if beacon_contact_wipe_before_true_zero_method == "wipe" %}
{% if printer.beacon.last_probe_result|lower == "ok" %}
{% set last_z_offset = printer.beacon.last_z_result %}
RATOS_ECHO MSG="Auto calibration nozzle wipe with probe result {last_z_offset}..."
G0 Z{(0.2 + last_z_offset)} F{z_speed}
G0 X70 F300
{% else %}
RATOS_ECHO MSG="Skipping auto calibration nozzle wipe because probing failed!"
{% endif %}
{% elif beacon_contact_wipe_before_true_zero_method == "probe_clean" %}
G0 Z5 F{z_speed}
G0 X50 Y10 F{speed}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% set contact_true_zero_temp_has_been_set = True %}
BEACON_PROBE_CLEAN X=50 Y=10
{% else %}
CONSOLE_ECHO TYPE="error" TITLE="Unknown wipe method" MSG="Unknown wipe method '{beacon_contact_wipe_before_true_zero_method}' configured, skipping wipe before beacon true zero."
{% endif %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME FUZZY_RADIUS={fuzzy_radius}
_START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION
{% if not contact_true_zero_temp_has_been_set %}
RATOS_ECHO MSG="Heating extruder to probing temperature..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={beacon_contact_true_zero_temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={beacon_contact_true_zero_temp} MAXIMUM={beacon_contact_true_zero_temp + 5}
{% endif %}
RATOS_ECHO MSG="Beacon contact auto calibration..."
{% if beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% endif %}
G0 Z5 F{z_speed}
[gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE_STORE_TRUE_ZERO_POSITION]
gcode =
{% set pos = printer.ratos.last_move_to_safe_z_home_position %}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_x VALUE={pos[0]}
SET_GCODE_VARIABLE MACRO=_START_PRINT_BED_MESH VARIABLE=actual_true_zero_position_y VALUE={pos[1]}
[gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER]
gcode =
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set first_x = printer["gcode_macro START_PRINT"].first_x|default(-1)|float %}
{% set first_y = printer["gcode_macro START_PRINT"].first_y|default(-1)|float %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set center_x = printable_x_max / 2.0 %}
{% set center_y = printable_y_max / 2.0 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% if printer["dual_carriage"] is defined %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
{% endif %}
{% set X0 = params.X0|default(-1)|int %}
{% set X1 = params.X1|default(-1)|int %}
{% set Y0 = params.Y0|default(-1)|int %}
{% set Y1 = params.Y1|default(-1)|int %}
{% set idex_mode = params.IDEX_MODE|default('')|lower %}
{% set both_toolheads = true if params.BOTH_TOOLHEADS|default(true)|lower=='true' else false %}
{% set initial_toolhead = params.INITIAL_TOOLHEAD|default(default_toolhead)|int %}
{% if idex_mode == '' %}
_PRIME
{% else %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
RATOS_ECHO PREFIX="IDEX" MSG="using combined prime offset for IDEX {idex_mode} mode"
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
{% if both_toolheads %}
{% if initial_toolhead == 0 %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T0"
_SELECT_TOOL T=0 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T1"
_SELECT_TOOL T=1 TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% else %}
RATOS_ECHO PREFIX="IDEX" MSG="using prime offset for T{initial_toolhead}"
_SELECT_TOOL T={initial_toolhead} TOOLSHIFT=false
_PRIME INITIAL_TOOLHEAD={initial_toolhead} BOTH_TOOLHEADS={both_toolheads} IDEX_MODE={idex_mode} Y1={Y1}
{% endif %}
{% endif %}
{% endif %}
CACHE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
SET_MACRO_TRAVEL_SETTINGS
{% if (X0 > -1 and Y1 > -1) or (first_x > 0 and first_y > 0) %}
{% if printer["dual_carriage"] is defined %}
{% set acceleration = printer["gcode_macro RatOS"].toolchange_travel_accel %}
{% set max_accel = printer.toolhead.max_accel|float %}
{% set square_corner_velocity = printer.toolhead.square_corner_velocity|float %}
SET_VELOCITY_LIMIT ACCEL={acceleration} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY=20
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
G0 Z3 F{z_speed}
{% endif %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
{% set first_z = 1 %}
{% else %}
{% set first_z = 3 %}
{% endif %}
{% if idex_mode == "mirror" %}
{% if first_y >= 0 %}
G0 Y{first_y} F{speed}
{% else %}
G0 Y{Y1} F{speed}
{% endif %}
{% endif %}
{% if idex_mode != "copy" and idex_mode != "mirror" %}
{% if printer["dual_carriage"] is defined and printer["gcode_macro RatOS"].nozzle_priming|lower == 'false' %}
_MOVE_TO_LOADING_POSITION TOOLHEAD={initial_toolhead} AUTOMATED=True
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead} AUTOMATED=True
{% endif %}
{% if first_x >= 0 and first_y >= 0 %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% else %}
{% set first_x = X0 %}
{% set first_y = Y0 %}
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %}
{% set first_x = X0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %}
{% set first_x = X1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_x|float <= center_x %}
{% set first_x = X0 %}
{% else %}
{% set first_x = X1 %}
{% endif %}
{% endif %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %}
{% set first_y = Y0 %}
{% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %}
{% set first_y = Y1 %}
{% else %}
{% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float <= center_y %}
{% set first_y = Y0 %}
{% else %}
{% set first_y = Y1 %}
{% endif %}
{% endif %}
{% endif %}
G0 X{first_x} Y{first_y} Z{first_z} F{speed}
{% endif %}
{% endif %}
{% endif %}
RESTORE_TOOLHEAD_SETTINGS KEY="start_print_after_heating_extruder"
_LOAD_RATOS_SKEW_PROFILE
[gcode_macro _PRIME]
gcode =
{% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' or printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %}
PRIME_BLOB INITIAL_TOOLHEAD={params.INITIAL_TOOLHEAD} BOTH_TOOLHEADS={params.BOTH_TOOLHEADS} IDEX_MODE={params.IDEX_MODE} Y1={params.Y1}
{% else %}
{% if printer["dual_carriage"] is defined %}
{% if params.IDEX_MODE == "copy" %}
_IDEX_COPY DANCE=0
{% elif params.IDEX_MODE == "mirror" %}
_IDEX_MIRROR DANCE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro END_PRINT]
description = End print procedure, use this in your Slicer.
gcode =
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=is_printing_gcode VALUE=False
SAVE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
SET_GCODE_VARIABLE MACRO=_IDEX_REMAP_TOOLHEADS VARIABLE=enabled VALUE=False
SET_GCODE_VARIABLE MACRO=_IDEX_JOIN_SPOOLS VARIABLE=enabled VALUE=False
{% if printer["gcode_macro RatOS"].auto_center_subject|default(false)|lower == 'true' %}
{% set object_xoffset = printer["gcode_macro START_PRINT"].object_xoffset|default(0)|float %}
RATOS_ECHO MSG="Adjusting object x-offset by {(0-object_xoffset)} mm"
SET_GCODE_OFFSET X_ADJUST={(0-object_xoffset)}
{% endif %}
{% endif %}
_USER_END_PRINT_BEFORE_HEATERS_OFF { rawparams }
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_USER_END_PRINT_AFTER_HEATERS_OFF { rawparams }
_END_PRINT_AFTER_HEATERS_OFF
_USER_END_PRINT_PARK { rawparams }
_END_PRINT_PARK
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
{% if printer["dual_carriage"] is not defined and printer["gcode_macro RatOS"].end_print_motors_off|lower != 'false' %}
M84
{% endif %}
M107
BED_MESH_CLEAR
RATOS_ECHO MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
{% if printer["dual_carriage"] is defined %}
M84
{% endif %}
RESET_NAMED_OFFSET EVENT="end_print"
RESTORE_TOOLHEAD_SETTINGS KEY="start_print"
_CHAMBER_FILTER_ON AT="print_end"
_CHAMBER_FILTER_OFF
_CHAMBER_HEATER_OFF
_USER_END_PRINT_FINISHED { rawparams }
[gcode_macro _END_PRINT_BEFORE_HEATERS_OFF]
gcode =
RATOS_ECHO MSG="Cleaning up..."
[gcode_macro _END_PRINT_AFTER_HEATERS_OFF]
gcode =
{% set idex_mode = '' %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set idex_toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %}
{% set r = printer["gcode_macro RatOS"].end_print_retract_filament|default(4)|float %}
{% if current_z < (max_z - z_hop) %}
{% set z_safe = z_hop %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' else false %}
{% if idex_mode != '' %}
{% if idex_mode == 'copy' or idex_mode == 'mirror' %}
{% set can_extrude = true if printer['extruder'].can_extrude|lower == 'true' and printer['extruder1'].can_extrude|lower == 'true' else false %}
{% else %}
{% if printer.toolhead.extruder == 'extruder1' %}
{% set can_extrude = true if printer['extruder1'].can_extrude|lower == 'true' else false %}
{% endif %}
{% endif %}
{% endif %}
G91
{% if can_extrude %}
G1 E-2 F3600
{% endif %}
G0 Z{z_safe} F3600
{% if can_extrude %}
G1 E-{(r-2)} F3600
{% endif %}
G90
[gcode_macro _SET_EXTRUSION_MODE]
gcode =
{% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %}
M83
{% else %}
M82
{% endif %}
[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 =
CACHE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set axis = params.AXIS|default('')|lower %}
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
{% if axis != '' %}
{% if axis == 'x' %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
{% elif axis == 'y' %}
MAYBE_HOME
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% else %}
{action_raise_error("Unknown axis specified. Expected X or Y.")}
{% endif %}
{% else %}
MAYBE_HOME
TEST_RESONANCES AXIS=X FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=Y FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_shaper_graph_x
RUN_SHELL_COMMAND CMD=generate_shaper_graph_y
{% endif %}
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="generate_shaper_graphs"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Shaper graph"
[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_macro MEASURE_COREXY_BELT_TENSION]
description = Generates resonance graph used to ensure belts are equally tensioned.
gcode =
CACHE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
SET_MACRO_TRAVEL_SETTINGS
CACHE_IS_GRAPH_FILES
_LED_INPUT_SHAPER_START
{% set freq_start = params.FREQUENCY_START|default(10)|int %}
{% set freq_end = params.FREQUENCY_END|default(133)|int %}
{% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %}
MAYBE_HOME
TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=belt-tension-upper FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=belt-tension-lower FREQ_START={freq_start} FREQ_END={freq_end} HZ_PER_SEC={hz_per_sec}
RUN_SHELL_COMMAND CMD=generate_belt_tension_graph
_LED_INPUT_SHAPER_END
RESTORE_TOOLHEAD_SETTINGS KEY="measure_corexy_belt_tension"
_LEARN_MORE_CALIBRATION
SHOW_IS_GRAPH_FILES TITLE="Belt Tension Graph"
[gcode_shell_command generate_belt_tension_graph]
command = /home/pi/printer_data/config/RatOS/scripts/generate-belt-tension-graph.sh
timeout = 90.
verbose = True
[idle_timeout]
gcode =
{% if printer.webhooks.state|lower == 'ready' %}
{% if printer.pause_resume.is_paused|lower == 'false' %}
_USER_BEFORE_IDLE_TIMEOUT
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
_USER_AFTER_IDLE_TIMEOUT
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[named_offsets]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[bed_mesh]
split_delta_z = 0.01
speed = 300
horizontal_move_z = 10
mesh_min = 20,30
mesh_max = 310,310
fade_start = 0.6
fade_end = 10.0
probe_count = 5,5
algorithm = bicubic
log_points = False
[fastconfig]
[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.103
control = pid
pid_kp = 42.817
pid_ki = 1.353
pid_kd = 338.788
[fan]
pin = !PA8
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PB4
fan_speed = 1
heater = extruder
shutdown_speed = 1
[controller_fan controller_fan]
pin = PD12
[printer]
kinematics = corexy
max_velocity = 300
max_accel = 3000
max_z_velocity = 20
max_z_accel = 350
square_corner_velocity = 5
minimum_cruise_ratio = 0.5
[gcode_macro QUAD_GANTRY_LEVEL]
rename_existing = QUAD_GANTRY_LEVEL_ORIG
gcode =
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
QUAD_GANTRY_LEVEL_ORIG
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 330
position_endstop = 330
step_pin = PF13
dir_pin = !x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PA2
position_min = 0
[stepper_y]
position_max = 350
position_endstop = 350
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 400
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
position_min = 0
[stepper_z]
position_max = 310
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
position_min = -5
homing_speed = 10
gear_ratio = 80:16
endstop_pin = probe:z_virtual_endstop
[quad_gantry_level]
gantry_corners =
-60,-10
410,420
points =
50,25
50,275
300,275
300,25
speed = 300
horizontal_move_z = 10
retries = 5
retry_tolerance = 0.0075
max_adjust = 10
[gcode_macro G32]
gcode =
SAVE_GCODE_STATE NAME=STATE_G32
G90
G28
QUAD_GANTRY_LEVEL
G28
G0 X175 Y175 Z30 F3600
RESTORE_GCODE_STATE NAME=STATE_G32
[extruder]
rotation_distance = 8
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB0
sensor_type = Generic 3950
sensor_pin = toolboard_t0:PA1
min_extrude_temp = 170
min_temp = 0
max_temp = 285
pressure_advance = 0.03
step_pin = toolboard_t0:PD3
dir_pin = !toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PB6
microsteps = 64
full_steps_per_rotation = 200
control = pid
pid_kp = 22.176
pid_ki = 2.843
pid_kd = 43.244
[firmware_retraction]
retract_speed = 40
unretract_extra_length = 0
unretract_speed = 40
retract_length = 0.5
[resonance_tester]
accel_chip_x = beacon
accel_chip_y = beacon
probe_points =
175,175,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 0.8
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 0.8
sense_resistor = 0.11
[stepper_z1]
step_pin = PE2
dir_pin = !z1_dir_pin
enable_pin = !PD4
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 0.8
sense_resistor = 0.11
[stepper_z2]
step_pin = PE6
dir_pin = !z2_dir_pin
enable_pin = !PE0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 stepper_z3]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 0.8
sense_resistor = 0.11
[stepper_z3]
step_pin = PF9
dir_pin = !z3_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
gear_ratio = 80:16
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PB3
run_current = 0.707
driver_tbl = 0
driver_toff = 4
driver_hend = 6
driver_hstrt = 7
sense_resistor = 0.11
[beacon]
serial = /dev/beacon
x_offset = 0
y_offset = 22.5
mesh_main_direction = x
mesh_runs = 1
mesh_cluster_size = 0
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[beacon_user_z_offset]
[beacon_mesh]
[beacon_true_zero_correction]
[beacon_adaptive_heat_soak]
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
ENSURE_CRITICAL_RATOS_INIT
_BEACON_MESH_INIT
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=nozzle_expansion_applied_offset
_INIT_HANDLE_DEPRECATED_SAVE_VARIABLES_VARIABLE VARIABLE=beacon_saved_runtime_offset
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_contact_expansion_multiplier is no longer used, please remove it from your config file."
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_scan_compensation_resolution is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG="The variable beacon_scan_compensation_resolution is no longer used, please remove it from your config file."
{% endif %}
[gcode_macro BEACON_RATOS_CALIBRATION]
gcode =
RATOS_ECHO MSG="Did you mean BEACON_RATOS_CALIBRATE?"
[gcode_macro BEACON_RATOS_CALIBRATE]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
BEACON_INITIAL_CALIBRATION _AUTOMATED=True
{% if beacon_contact_start_print_true_zero %}
BEACON_POKE_TEST _AUTOMATED=True
_BEACON_CHECK_POKE
{% if printer["dual_carriage"] is not defined %}
BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET _AUTOMATED=True
{% endif %}
{% endif %}
{% set already_heated = False %}
{% if beacon_contact_start_print_true_zero and beacon_scan_compensation_enable %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% set already_heated = True %}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True _AUTOMATED_ALREADY_HEATED={already_heated} BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if beacon_contact_start_print_true_zero %}
{% if printer["dual_carriage"] is not defined %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
_BEACON_ECHO_POKE
{% endif %}
RATOS_ECHO MSG="Beacon calibration finished!"
_LED_BEACON_CALIBRATION_END
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
[gcode_macro BEACON_INITIAL_CALIBRATION]
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
_Z_HOP
RATOS_ECHO MSG="Initial beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro BEACON_FINAL_CALIBRATION]
description = Runs BEACON_AUTO_CALIBRATE after heating the bed and chamber to specified temperatures. This creates a beacon model under reference conditions for future use.
This macro will skip calibration if both the beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero settings are enabled, because a new
model will be calibrated automatically at the start of each print. Use FORCE=True to override this check.
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set already_heated = true if params._AUTOMATED_ALREADY_HEATED|default(false)|lower == 'true' else false %}
{% set force = params.FORCE|default('false')|lower in ('1', 'true', 'yes') %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default('false')|lower == "true" %}
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero and not force %}
RATOS_ECHO MSG="BEACON_FINAL_CALIBRATION skipped, not needed because beacon_contact_calibrate_model_on_true_zero is enabled. Use FORCE=True to override."
{% else %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% set beacon_adaptive_heat_soak_layer_quality = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set beacon_adaptive_heat_soak_maximum_first_layer_duration = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not already_heated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
{% if not already_heated %}
G0 Z2.5 F{z_hop_speed}
RATOS_ECHO MSG="Waiting for calibration temperature..."
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,3600]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% endif %}
_Z_HOP
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
_Z_HOP
RATOS_ECHO MSG="Final beacon contact calibration finished!"
{% if not automated %}
_CONSOLE_SAVE_CONFIG
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro BEACON_POKE_TEST]
variable_poke_result_1 = -1
variable_poke_result_2 = -1
variable_poke_result_3 = -1
variable_poke_result_4 = -1
variable_poke_result_5 = -1
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set z_hop_speed = printer.fastconfig.config.ratos_homing.z_hop_speed|float * 60 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_1 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_2 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_3 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_4 VALUE=-1
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE=poke_result_5 VALUE=-1
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
G0 Z5 F{z_hop_speed}
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=1
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=2
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=3
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=4
_BEACON_PROBE_POKE
_BEACON_STORE_POKE I=5
_Z_HOP
RATOS_ECHO MSG="Beacon poke test finished!"
{% if not automated %}
_BEACON_ECHO_POKE
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_POKE]
gcode =
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
BEACON_POKE speed=3 top=5 bottom={poke_bottom}
BEACON_QUERY
[gcode_macro _BEACON_STORE_POKE]
gcode =
{% set i = params.I|default(1)|int %}
{% set last_z = printer.beacon.last_poke_result|default(0)|float %}
{% if printer.beacon.last_poke_result|lower != "none" %}
{% if printer.beacon.last_poke_result.error == 0 %}
SET_GCODE_VARIABLE MACRO=BEACON_POKE_TEST VARIABLE={"poke_result_%s" % i} VALUE={printer.beacon.last_poke_result.latency}
{% endif %}
{% endif %}
[gcode_macro _BEACON_CHECK_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% if p1 == -1 or p2 == -1 or p3 == -1 or p4 == -1 or p5 == -1 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test error!") }
{% endif %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg > 6 %}
_LED_BEACON_CALIBRATION_ERROR
{ action_raise_error("Beacon poke test failed!") }
{% endif %}
[gcode_macro _BEACON_ECHO_POKE]
gcode =
{% set p1 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_1|int %}
{% set p2 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_2|int %}
{% set p3 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_3|int %}
{% set p4 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_4|int %}
{% set p5 = printer["gcode_macro BEACON_POKE_TEST"].poke_result_5|int %}
{% set avg = (p1 + p2 + p3 + p4 + p5) / 5 %}
{% if avg <= 1 %}
{% set type = "success" %}
{% set note = "Extremely low noise, rarely achieved" %}
{% elif avg > 1 and avg <= 4 %}
{% set type = "info" %}
{% set note = "Excellent performance for a typical printer" %}
{% elif avg > 4 and avg <= 8 %}
{% set type = "warning" %}
{% set note = "Acceptable performance, machine may have considerable cyclic axis noise" %}
{% elif avg > 8 and avg <= 11 %}
{% set type = "alert" %}
{% set note = "Not ideal, may want to verify proper mounting or use thinner stackups" %}
{% elif avg > 11 %}
{% set type = "alert" %}
{% set note = "Reason for concern, present setup may be risky to continue with" %}
{% endif %}
CONSOLE_ECHO TITLE="Beacon poke test result:" TYPE={type} MSG={'"Average latency: %.2f_N_%s"' % (avg, note)}
[gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET]
variable_reference_z = 0.0
gcode =
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Nozzle temperature offset calibration..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=150
_BEACON_PROBE_NOZZLE_TEMP_OFFSET TEMP=250
_BEACON_STORE_NOZZLE_TEMP_OFFSET TEMP=250
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET=0
{% if not automated %}
_BEACON_ECHO_NOZZLE_TEMP_OFFSETS
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
{% endif %}
[gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set svv = printer.save_variables.variables %}
RATOS_ECHO PREFIX="BEACON" MSG="Waiting for nozzle to reach {temp}°C..."
SET_HEATER_TEMPERATURE HEATER={"extruder" if default_toolhead == 0 else "extruder1"} TARGET={temp}
TEMPERATURE_WAIT SENSOR={"extruder" if default_toolhead == 0 else "extruder1"} MINIMUM={temp} MAXIMUM={temp + 2}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
RATOS_ECHO PREFIX="BEACON" MSG="Probing with nozzle temperature {temp}°C..."
PROBE PROBE_METHOD=contact PROBE_SPEED=3 LIFT_SPEED=15 SAMPLES=5 SAMPLE_RETRACT_DIST=3 SAMPLES_TOLERANCE=0.005 SAMPLES_TOLERANCE_RETRIES=10 SAMPLES_RESULT=median
BEACON_QUERY
G0 Z5 F{z_speed}
[gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET]
gcode =
{% set temp = params.TEMP|int %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% set last_z = printer.beacon.last_z_result|default(0)|float %}
{% if temp == 150 %}
SET_GCODE_VARIABLE MACRO=BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET"].reference_z|default(0)|float %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_t{default_toolhead} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS]
gcode =
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set svv = printer.save_variables.variables %}
{% if default_toolhead == 0 %}
CONSOLE_ECHO TYPE="info" MSG={'"T0 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t0}
{% else %}
CONSOLE_ECHO TYPE="info" MSG={'"T1 expansion coefficient %.6f"' % svv.nozzle_expansion_coefficient_t1}
{% endif %}
[gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET]
description = "Set the thermal expansion z offset for the active toolhead based on the current extruder target temperature and thermal expansion coefficient."
gcode =
{% if params.RESET is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The RESET parameter is no longer supported and has no effect."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% if params.TOOLHEAD is defined %}
CONSOLE_ECHO TITLE="Deprecated parameter" TYPE="warning" MSG="The TOOLHEAD parameter is no longer supported and has no effect. The macro now automatically determines the current toolhead."
_DEBUG_ECHO_STACK_TRACE
{% endif %}
{% set beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_expansion_compensation %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_contact_true_zero_temp = printer["gcode_macro RatOS"].beacon_contact_true_zero_temp|default(150)|int %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set toolhead = default_toolhead %}
{% if printer["dual_carriage"] is defined %}
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if current_idex_mode=='primary' else default_toolhead %}
{% endif %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_t0 = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if printer["dual_carriage"] is defined %}
{% set nozzle_expansion_coefficient_t1 = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_delta = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = temp_delta * (expansion_coefficient / 100) %}
SET_NAMED_OFFSET NAME=hotend_thermal_expansion Z={expansion_offset} MOVE=1 MOVE_SPEED={z_speed}
RATOS_ECHO PREFIX="BEACON" MSG={'"Nozzle expansion offset of %.6fmm applied to T%s"' % (expansion_offset, toolhead)}
DEBUG_ECHO PREFIX="_BEACON_SET_NOZZLE_TEMP_OFFSET" MSG="toolhead: {toolhead}, coefficient: {expansion_coefficient|round(6)}, temp_delta: {temp_delta|round(1)}, expansion_offset: {expansion_offset|round(6)}"
{% endif %}
[gcode_macro BEACON_MEASURE_BEACON_OFFSET]
variable_needs_compensation = False
variable_reference_z = 0.0
variable_front = 0.0
variable_front_left = 0.0
variable_front_right = 0.0
variable_back = 0.0
variable_back_left = 0.0
variable_back_right = 0.0
variable_right = 0.0
variable_left = 0.0
variable_margin_x = 40
variable_margin_y = 40
gcode =
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %}
{% set printable_x_max = printer["gcode_macro RatOS"].printable_x_max|float %}
{% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %}
{% set safe_home_x, safe_home_y = printer.ratos.safe_home_position %}
{% set poke_bottom = printer["gcode_macro RatOS"].beacon_contact_poke_bottom_limit|default(-1)|float %}
{% set beacon_contact_start_print_true_zero = true if printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure beacon offset..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_OFFSET_COMPARE
_BEACON_STORE_BEACON_OFFSET LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_BEACON_OFFSET
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_STORE_BEACON_OFFSET]
gcode =
{% set location = params.LOCATION|lower %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_BEACON_OFFSET]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].left|default(0)|float * 1000 %}
{% set line_1 = "Front left: %.6fμm" % (front_left) %}
{% set line_2 = "Front center: %.6fμm" % (front) %}
{% set line_3 = "Front right: %.6fμm" % (front_right) %}
{% set line_4 = "Left center: %.6fμm" % (left) %}
{% set line_5 = "Right center: %.6fμm" % (right) %}
{% set line_6 = "Back left: %.6fμm" % (back_left) %}
{% set line_7 = "Back center: %.6fμm" % (back) %}
{% set line_8 = "Back right: %.6fμm" % (back_right) %}
{% set max_value = [(front_left|abs), (front|abs), (front_right|abs), (left|abs), (right|abs), (back_left|abs), (back|abs), (back_right|abs)]|max %}
{% if max_value <= 50 %}
{% set type = "success" %}
{% set recommendation = "Very low beacon offset: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low beacon offset: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High beacon offset: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High beacon offset: %.6fμm._N_You will encounter first layer problems on large prints unless you activate beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high beacon offset: %.6fμm._N_You have significant scan/contact inconsistency which is indicative of mechanical problems, please investigate before resorting to software compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_BEACON_OFFSET VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Beacon offset relative to the center" TYPE={type} MSG={'"_N_%s_N__N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s_N_%s"' % (recommendation, line_1, line_2, line_3, line_4, line_5, line_6, line_7, line_8)}
[gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set profile = params.PROFILE|default("auto")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% set keep_temp_meshes = params.KEEP_TEMP_MESHES|default(0) %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default(false)|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = printer["gcode_macro RatOS"].beacon_contact_calibrate_model_on_true_zero|default(false)|lower == 'true' %}
{% set desired_spacing = printer["gcode_macro RatOS"].beacon_scan_compensation_desired_spacing|float %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% set hotend_heat_soak_time = printer["gcode_macro RatOS"].hotend_heat_soak_time|default(0)|int %}
{% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
{% set beacon_adaptive_heat_soak = true if printer["gcode_macro RatOS"].beacon_adaptive_heat_soak|default(false)|lower == 'true' else false %}
{% set beacon_adaptive_heat_soak_min_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_min_wait|default(0)|int %}
{% set beacon_adaptive_heat_soak_max_wait = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_max_wait|default(5400)|int %}
{% set beacon_adaptive_heat_soak_extra_wait_after_completion = printer["gcode_macro RatOS"].beacon_adaptive_heat_soak_extra_wait_after_completion|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=150
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed_temp}
RATOS_ECHO MSG="Please wait..."
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={bed_temp} MAXIMUM={(bed_temp + 5)}
TEMPERATURE_WAIT SENSOR={'extruder' if default_toolhead == 0 else 'extruder1'} MINIMUM=150 MAXIMUM=155
{% if beacon_contact_start_print_true_zero and beacon_contact_calibrate_model_on_true_zero %}
BEACON_AUTO_CALIBRATE SKIP_MULTIPOINT_PROBING=1
{% else %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
_MOVE_TO_SAFE_Z_HOME
G1 Z2.5 F{z_speed}
{% if beacon_adaptive_heat_soak %}
BEACON_WAIT_FOR_PRINTER_HEAT_SOAK _FORCE_THRESHOLD=100 MINIMUM_WAIT={beacon_adaptive_heat_soak_min_wait} MAXIMUM_WAIT={[beacon_adaptive_heat_soak_max_wait,9000]|max}
{% if beacon_adaptive_heat_soak_extra_wait_after_completion > 0 %}
RATOS_ECHO MSG="Waiting for an additional {beacon_adaptive_heat_soak_extra_wait_after_completion} seconds after heat soak completion..."
G4 P{(beacon_adaptive_heat_soak_extra_wait_after_completion * 1000)}
{% endif %}
{% else %}
{% if bed_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking bed for {bed_heat_soak_time} seconds..."
G4 P{(bed_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if not (beacon_adaptive_heat_soak or bed_heat_soak_time > 0) %}
{% if hotend_heat_soak_time > 0 %}
RATOS_ECHO MSG="Heat soaking hotend for {hotend_heat_soak_time} seconds..."
G4 P{(hotend_heat_soak_time * 1000)}
{% endif %}
{% endif %}
{% if printer.z_tilt is defined %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% endif %}
{% if printer.quad_gantry_level is defined %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% endif %}
_BEACON_CREATE_SCAN_COMPENSATION_MESH_CORE PROFILE="{profile}" DESIRED_SPACING={desired_spacing} CHAMBER_TEMP={chamber_temp} KEEP_TEMP_MESHES={keep_temp_meshes}
{% if not automated %}
SET_HEATER_TEMPERATURE HEATER={'extruder' if default_toolhead == 0 else 'extruder1'} TARGET=0
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
{% endif %}
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_OFF
{% endif %}
{% if automated %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
{% if not automated %}
_LED_BEACON_CALIBRATION_END
{% endif %}
RATOS_ECHO MSG="Beacon scan compensation mesh created!"
{% if not automated %}
RATOS_ECHO MSG="Saving config and restarting klipper..."
SAVE_CONFIG
{% endif %}
{% endif %}
[gcode_macro _BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_SCAN_COMPENSATION_IF_ENABLED" MSG="beacon_scan_compensation_profile {beacon_scan_compensation_profile}, beacon_scan_compensation_enable {beacon_scan_compensation_enable}"
{% if beacon_scan_compensation_enable %}
BEACON_APPLY_SCAN_COMPENSATION PROFILE="{beacon_scan_compensation_profile}"
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_MODEL]
gcode =
{% set beacon_contact_start_print_true_zero = params.BEACON_CONTACT_START_PRINT_TRUE_ZERO|lower == 'true' %}
{% set beacon_contact_calibrate_model_on_true_zero = params.beacon_contact_calibrate_model_on_true_zero|lower == 'true' %}
{% if printer.fastconfig.settings.beacon is defined and not printer.beacon.model %}
{% set beacon_model_required_for_true_zero = beacon_contact_start_print_true_zero and not beacon_contact_calibrate_model_on_true_zero %}
{% set beacon_model_required_for_homing =
printer.fastconfig.settings.stepper_z.endstop_pin == 'probe:z_virtual_endstop'
and (( printer.fastconfig.settings.beacon.home_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_homing|default(false)|lower != 'true')
or ( printer.fastconfig.settings.beacon.default_probe_method|default('proximity')|lower == 'proximity'
and printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower != 'true' )) %}
{% if beacon_model_required_for_homing or beacon_model_required_for_true_zero %}
_LED_START_PRINTING_ERROR
{ action_raise_error("An active Beacon model is required. Have you performed initial Beacon calibration?") }
{% endif %}
{% endif %}
[gcode_macro _START_PRINT_PREFLIGHT_CHECK_BEACON_SCAN_COMPENSATION]
gcode =
{% set beacon_scan_compensation_profile = printer["gcode_macro RatOS"].beacon_scan_compensation_profile %}
{% set beacon_scan_compensation_enable = true if printer["gcode_macro RatOS"].beacon_scan_compensation_enable|default(false)|lower == 'true' else false %}
{% set bed_temp_mismatch_is_error = true if printer["gcode_macro RatOS"].beacon_scan_compensation_bed_temp_mismatch_is_error|default(false)|lower == 'true' else false %}
{% set bed_temp = params.BED_TEMP|default(0)|float %}
{% if bed_temp == 0 %}
{% set bed_temp = printer.heater_bed.temperature %}
{% endif %}
DEBUG_ECHO PREFIX="_START_PRINT_PREFLIGHT_CHECK_BEACON" MSG="beacon_scan_compensation_profile={beacon_scan_compensation_profile}, beacon_scan_compensation_enable={beacon_scan_compensation_enable}, bed_temp={bed_temp}"
{% if beacon_scan_compensation_enable %}
_VALIDATE_COMPENSATION_MESH_PROFILE PROFILE="{beacon_scan_compensation_profile}" TITLE="Check Beacon scan compensation profile" SUBJECT="Configured compensation profile '{beacon_scan_compensation_profile}'" COMPARE_BED_TEMP={bed_temp} COMPARE_BED_TEMP_IS_ERROR={bed_temp_mismatch_is_error}
{% endif %}
[gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION]
gcode =
{% set bed_temp = params.BED_TEMP|default(85)|int %}
{% set chamber_temp = params.CHAMBER_TEMP|default(0)|int %}
{% set needs_scan_compensation = true if printer["gcode_macro BEACON_MEASURE_BEACON_OFFSET"].needs_compensation|default(false)|lower == 'true' else false %}
{% if needs_scan_compensation %}
BEACON_CREATE_SCAN_COMPENSATION_MESH _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% endif %}
[gcode_macro _BEACON_HOME_AND_ABL]
gcode =
{% if printer["dual_carriage"] is defined %}
_IDEX_SINGLE INIT=1
{% endif %}
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% set needs_rehoming = False %}
{% if printer.z_tilt is defined and not printer.z_tilt.applied %}
RATOS_ECHO MSG="Adjusting Z tilt..."
Z_TILT_ADJUST
RATOS_ECHO MSG="Rehoming Z after Z tilt adjustment..."
{% set needs_rehoming = True %}
{% endif %}
{% if printer.quad_gantry_level is defined and not printer.quad_gantry_level.applied %}
RATOS_ECHO MSG="Running quad gantry leveling..."
QUAD_GANTRY_LEVEL
RATOS_ECHO MSG="Rehoming Z after quad gantry leveling..."
{% set needs_rehoming = True %}
{% endif %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% if needs_rehoming %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1 SKIP_MULTIPOINT_PROBING=1
{% endif %}
[gcode_macro SAVE_Z_OFFSET]
description = Deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead, or in Mainsail use the SAVE button in the Z-OFFSET section.
gcode =
{% set beacon_contact_start_print_true_zero = printer["gcode_macro RatOS"].beacon_contact_start_print_true_zero|default('false')|lower == 'true' %}
{% set msg = "SAVE_Z_OFFSET is deprecated. Use the Klipper standard Z_OFFSET_APPLY_PROBE macro instead,_N_or in Mainsail use the SAVE button in the Z-OFFSET section."%}
{% if not (printer.fastconfig.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
{% set msg = msg + "_N_You must then use the SAVE_CONFIG command to persist the change." %}
{% endif %}
CONSOLE_ECHO TYPE="error" MSG="{msg}"
[gcode_macro _BEACON_OFFSET_COMPARE]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE SAMPLES_DROP=1 SAMPLES=3
BEACON_QUERY
[gcode_macro T0]
variable_join = 0
variable_remap = 0
variable_alert = ""
variable_filament_name = ""
variable_filament_type = ""
variable_filament_temp = 0
variable_runout_sensor = ""
variable_active = True
variable_color = "7bff33"
variable_hotend_type = "HF"
variable_has_cht_nozzle = False
variable_cooling_position_to_nozzle_distance = 40
variable_tooolhead_sensor_to_extruder_gear_distance = 15
variable_extruder_gear_to_cooling_position_distance = 30
variable_filament_loading_nozzle_offset = -5
variable_filament_grabbing_length = 5
variable_filament_grabbing_speed = 1
variable_enable_insert_detection = True
variable_enable_runout_detection = True
variable_enable_clog_detection = True
variable_unload_after_runout = True
variable_purge_after_load = 0
variable_purge_before_unload = 0
variable_extruder_load_speed = 60
variable_filament_load_speed = 10
variable_standby = False
variable_temperature_offset = 0
variable_has_oozeguard = False
variable_has_front_arm_nozzle_wiper = False
variable_toolhead_sensor_button_only_when_sensor_enabled = False
variable_toolhead_detect_clog_only_when_sensor_enabled = True
variable_resume_after_insert = False
gcode =
{% set x = params.X|default(-1.0)|float %}
{% set y = params.Y|default(-1.0)|float %}
{% set z = params.Z|default(0.0)|float %}
{% set s = params.S|default(1)|int %}
{% if printer["gcode_macro _SELECT_TOOL"] is defined %}
_SELECT_TOOL T=0 X={x} Y={y} Z={z} TOOLSHIFT={s}
{% endif %}
[save_variables]
filename = /home/pi/printer_data/config/ratos-variables.cfg
=======================
Extruder max_extrude_ratio=0.266081
mcu 'mcu': Starting serial connect
webhooks client 3929765920: New connection
webhooks client 3929765920: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'mcu' config: ADC_MAX=4095 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c3_PA8_PC9=PA8,PC9 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_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 BUS_PINS_spi5=PF8,PF9,PF7 BUS_PINS_spi5a=PH7,PF11,PH6 BUS_PINS_spi6=PG12,PG14,PG13 CLOCK_FREQ=400000000 MCU=stm32h723xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu 'rpi': Starting connect
Loaded MCU 'rpi' 119 commands (?-20240727_132503-fv-az659-741 / gcc: (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110 binutils: (GNU Binutils for Raspbian) 2.35.2)
MCU 'rpi' config: ADC_MAX=4095 CLOCK_FREQ=50000000 MCU=linux PCA9685_MAX=4096 PWM_MAX=32768 STATS_SUMSQ_BASE=256
mcu 'toolboard_t0': Starting serial connect
Loaded MCU 'toolboard_t0' 118 commands (v0.12.0-402-g2817b348 / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.34-4+rpi1+14) 2.34)
MCU 'toolboard_t0' config: ADC_MAX=4095 BUS_PINS_i2c1_PA9_PA10=PA9,PA10 BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 BUS_PINS_i2c2_PB13_PB14=PB13,PB14 BUS_PINS_i2c3_PB3_PB4=PB3,PB4 BUS_PINS_i2c3_PC0_PC1=PC0,PC1 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2_PB2_PB11_PB10=PB2,PB11,PB10 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=64000000 MCU=stm32g0b1xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PF0,PF1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu_temperature 'mcu' nominal base=-274.761905 slope=1625.000000
mcu_temperature 'toolboard_t0' nominal base=-273.206997 slope=1313.265306
mcu 'beacon': Starting serial connect
Loaded MCU 'beacon' 45 commands (Beacon 2.1.0 / )
MCU 'beacon' config: ADC_MAX=4095 BEACON_ACCEL_BITS=12 BEACON_ACCEL_SCALE_16G=7.81 BEACON_ACCEL_SCALE_2G=0.98 BEACON_ACCEL_SCALE_4G=1.95 BEACON_ACCEL_SCALE_8G=3.91 BEACON_ADC_SMOOTH_COUNT=16 BEACON_HAS_ACCEL=1 BEACON_REV=H CLOCK_FREQ=32000000 MCU=beacon STATS_SUMSQ_BASE=256
Sending MCU 'mcu' printer configuration...
Configured MCU 'mcu' (1024 moves)
Sending MCU 'rpi' printer configuration...
Configured MCU 'rpi' (1024 moves)
Sending MCU 'toolboard_t0' printer configuration...
Configured MCU 'toolboard_t0' (1024 moves)
Starting heater checks for heater_bed
beacon: loaded fnorm=5097771.25 temp=19.76 amfg=0.960 from nvm
beacon: built tempco model version 1 {'amfg': 0.9600737096063234, 'tcc': -6.477678986652925e-06, 'tcfl': -0.0006437466059114605, 'tctl': 0.0019760718274445636, 'fmin': 5097771.253436804, 'fmin_temp': 19.758686065673828}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
beacon_user_z_offset: beacon_contact_start_print_true_zero is enabled, activating beacon user z-offset management. Applying configured z_offset of 0.0 mm to named offset 'user_probe_z_offset'.
Starting heater checks for extruder
Stats 32.9: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3490 bytes_read=7226 bytes_retransmit=9 bytes_invalid=0 send_seq=290 receive_seq=290 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016536 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=846 bytes_read=4720 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000692 adj=49993649 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1371 bytes_read=4929 bytes_retransmit=9 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64001524 adj=64000478 Octopus_Pro_H723_V1.1: temp=0.0 EBB42_Gen2_v1.0: temp=0.0 raspberry_pi: temp=42.8 heater_bed: target=0 temp=0.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=360 bytes_read=2049 bytes_retransmit=0 bytes_invalid=0 send_seq=60 receive_seq=60 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999655 adj=31998529 coil_temp=0.0 refs=0 sysload=2.33 cputime=8.642 memavail=3296220 print_time=44.259 buffer_time=0.249 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000
Initializing RatOS...
CALCULATE_PRINTABLE_AREA: Printable area calculated: X: 0,330.0 Y: 0,350.0
webhooks: registering remote method 'shutdown_machine' for connection id: 3929765920
webhooks: registering remote method 'reboot_machine' for connection id: 3929765920
webhooks: registering remote method 'pause_job_queue' for connection id: 3929765920
webhooks: registering remote method 'start_job_queue' for connection id: 3929765920
Stats 33.9: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3496 bytes_read=7329 bytes_retransmit=9 bytes_invalid=0 send_seq=291 receive_seq=291 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015952 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=852 bytes_read=4736 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999876 adj=50002154 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000028 bytes_write=1377 bytes_read=5076 bytes_retransmit=9 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000570 adj=63998761 Octopus_Pro_H723_V1.1: temp=31.2 EBB42_Gen2_v1.0: temp=25.9 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=366 bytes_read=2405 bytes_retransmit=0 bytes_invalid=0 send_seq=61 receive_seq=61 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999556 adj=31998552 coil_temp=21.3 refs=0 mcu_temp=22.57 supply_voltage=2.994 sysload=2.33 cputime=8.715 memavail=3286512 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 34.9: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3502 bytes_read=7476 bytes_retransmit=9 bytes_invalid=0 send_seq=292 receive_seq=292 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015457 rpi: mcu_awake=0.004 mcu_task_avg=0.000024 mcu_task_stddev=0.000013 bytes_write=858 bytes_read=4766 bytes_retransmit=0 bytes_invalid=0 send_seq=117 receive_seq=117 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999685 adj=50000101 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000028 bytes_write=1383 bytes_read=5179 bytes_retransmit=9 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000321 adj=63997327 Octopus_Pro_H723_V1.1: temp=31.0 EBB42_Gen2_v1.0: temp=26.0 raspberry_pi: temp=40.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=372 bytes_read=2761 bytes_retransmit=0 bytes_invalid=0 send_seq=62 receive_seq=62 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000326 adj=31998655 coil_temp=21.3 refs=0 mcu_temp=22.59 supply_voltage=2.994 sysload=2.33 cputime=8.751 memavail=3285284 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
HELLO_RATOS: version: v2.1.0-RC4-5-g9b7d2ad3, distro: RatOS v2.1.0-RC4 (bullseye)
No deferred RatOS console messages to write.
ratos: Current CPU governor(s): performance
Stats 38.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000002 mcu_task_stddev=0.000002 bytes_write=3508 bytes_read=7869 bytes_retransmit=9 bytes_invalid=0 send_seq=293 receive_seq=293 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400017124 rpi: mcu_awake=0.004 mcu_task_avg=0.000024 mcu_task_stddev=0.000013 bytes_write=864 bytes_read=4782 bytes_retransmit=0 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999870 adj=49999280 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1389 bytes_read=5586 bytes_retransmit=9 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000251 adj=63997187 Octopus_Pro_H723_V1.1: temp=31.1 EBB42_Gen2_v1.0: temp=26.1 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=4103 bytes_retransmit=0 bytes_invalid=0 send_seq=63 receive_seq=63 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000130 adj=32000052 coil_temp=21.3 refs=0 mcu_temp=22.67 supply_voltage=2.994 sysload=2.22 cputime=8.817 memavail=3287312 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 39.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3514 bytes_read=7986 bytes_retransmit=9 bytes_invalid=0 send_seq=294 receive_seq=294 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016224 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000006 bytes_write=870 bytes_read=4811 bytes_retransmit=0 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999762 adj=49997695 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1395 bytes_read=5689 bytes_retransmit=9 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000203 adj=63996781 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=26.1 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=4459 bytes_retransmit=0 bytes_invalid=0 send_seq=64 receive_seq=64 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000094 adj=31998143 coil_temp=21.3 refs=0 mcu_temp=22.69 supply_voltage=2.994 sysload=2.22 cputime=8.837 memavail=3298556 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 40.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3520 bytes_read=8089 bytes_retransmit=9 bytes_invalid=0 send_seq=295 receive_seq=295 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400016023 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000006 bytes_write=876 bytes_read=4827 bytes_retransmit=0 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999753 adj=49997961 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1401 bytes_read=5821 bytes_retransmit=9 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000303 adj=63997305 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=26.2 raspberry_pi: temp=41.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=4815 bytes_retransmit=0 bytes_invalid=0 send_seq=65 receive_seq=65 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000090 adj=31998438 coil_temp=21.3 refs=0 mcu_temp=22.71 supply_voltage=2.994 sysload=2.05 cputime=8.855 memavail=3298304 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 41.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3526 bytes_read=8221 bytes_retransmit=9 bytes_invalid=0 send_seq=296 receive_seq=296 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015770 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000006 bytes_write=882 bytes_read=4843 bytes_retransmit=0 bytes_invalid=0 send_seq=121 receive_seq=121 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999767 adj=49997961 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1407 bytes_read=5924 bytes_retransmit=9 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000310 adj=63997835 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=26.2 raspberry_pi: temp=40.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=5171 bytes_retransmit=0 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000079 adj=31998572 coil_temp=21.3 refs=0 mcu_temp=22.74 supply_voltage=2.994 sysload=2.05 cputime=8.873 memavail=3298360 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 42.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3532 bytes_read=8319 bytes_retransmit=9 bytes_invalid=0 send_seq=297 receive_seq=297 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015550 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000006 bytes_write=888 bytes_read=4859 bytes_retransmit=0 bytes_invalid=0 send_seq=122 receive_seq=122 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999792 adj=49998086 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1413 bytes_read=6027 bytes_retransmit=9 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000279 adj=63997995 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=26.1 raspberry_pi: temp=40.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=5527 bytes_retransmit=0 bytes_invalid=0 send_seq=67 receive_seq=67 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000161 adj=31998671 coil_temp=21.3 refs=0 mcu_temp=22.76 supply_voltage=2.994 sysload=2.05 cputime=8.890 memavail=3299100 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 43.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3538 bytes_read=8422 bytes_retransmit=9 bytes_invalid=0 send_seq=298 receive_seq=298 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015423 rpi: mcu_awake=0.000 mcu_task_avg=0.000008 mcu_task_stddev=0.000006 bytes_write=894 bytes_read=4875 bytes_retransmit=0 bytes_invalid=0 send_seq=123 receive_seq=123 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999783 adj=49998225 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1419 bytes_read=6173 bytes_retransmit=9 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000261 adj=63997972 Octopus_Pro_H723_V1.1: temp=31.4 EBB42_Gen2_v1.0: temp=26.3 raspberry_pi: temp=40.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=5883 bytes_retransmit=0 bytes_invalid=0 send_seq=68 receive_seq=68 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000136 adj=31999086 coil_temp=21.4 refs=0 mcu_temp=22.77 supply_voltage=2.994 sysload=2.05 cputime=8.907 memavail=3298112 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 44.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3544 bytes_read=8568 bytes_retransmit=9 bytes_invalid=0 send_seq=299 receive_seq=299 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015359 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=900 bytes_read=4904 bytes_retransmit=0 bytes_invalid=0 send_seq=124 receive_seq=124 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999808 adj=49998160 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1425 bytes_read=6276 bytes_retransmit=9 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000275 adj=63997941 Octopus_Pro_H723_V1.1: temp=31.2 EBB42_Gen2_v1.0: temp=26.3 raspberry_pi: temp=39.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=6239 bytes_retransmit=0 bytes_invalid=0 send_seq=69 receive_seq=69 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000111 adj=31998987 coil_temp=21.4 refs=0 mcu_temp=22.79 supply_voltage=2.994 sysload=2.05 cputime=8.925 memavail=3298112 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 45.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3550 bytes_read=8671 bytes_retransmit=9 bytes_invalid=0 send_seq=300 receive_seq=300 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015277 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=906 bytes_read=4920 bytes_retransmit=0 bytes_invalid=0 send_seq=125 receive_seq=125 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999815 adj=49998235 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1431 bytes_read=6379 bytes_retransmit=9 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000273 adj=63998010 Octopus_Pro_H723_V1.1: temp=31.3 EBB42_Gen2_v1.0: temp=26.4 raspberry_pi: temp=40.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=6595 bytes_retransmit=0 bytes_invalid=0 send_seq=70 receive_seq=70 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000094 adj=31998899 coil_temp=21.4 refs=0 mcu_temp=22.83 supply_voltage=2.994 sysload=1.88 cputime=8.942 memavail=3298116 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 46.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3556 bytes_read=8774 bytes_retransmit=9 bytes_invalid=0 send_seq=301 receive_seq=301 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015255 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=912 bytes_read=4936 bytes_retransmit=0 bytes_invalid=0 send_seq=126 receive_seq=126 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999812 adj=49998227 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1437 bytes_read=6511 bytes_retransmit=9 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000275 adj=63998066 Octopus_Pro_H723_V1.1: temp=31.4 EBB42_Gen2_v1.0: temp=26.4 raspberry_pi: temp=40.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=6951 bytes_retransmit=0 bytes_invalid=0 send_seq=71 receive_seq=71 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000084 adj=31998853 coil_temp=21.4 refs=0 mcu_temp=22.85 supply_voltage=2.994 sysload=1.88 cputime=8.959 memavail=3298116 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 47.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3562 bytes_read=8906 bytes_retransmit=9 bytes_invalid=0 send_seq=302 receive_seq=302 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015231 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=918 bytes_read=4952 bytes_retransmit=0 bytes_invalid=0 send_seq=127 receive_seq=127 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999814 adj=49998145 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1443 bytes_read=6614 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000274 adj=63998036 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=26.5 raspberry_pi: temp=40.9 heater_bed: target=0 temp=20.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=7307 bytes_retransmit=0 bytes_invalid=0 send_seq=72 receive_seq=72 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000084 adj=31998821 coil_temp=21.4 refs=0 mcu_temp=22.87 supply_voltage=2.993 sysload=1.88 cputime=8.977 memavail=3298120 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 48.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3568 bytes_read=9009 bytes_retransmit=9 bytes_invalid=0 send_seq=303 receive_seq=303 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015474 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=924 bytes_read=4968 bytes_retransmit=0 bytes_invalid=0 send_seq=128 receive_seq=128 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999841 adj=49998110 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1449 bytes_read=6731 bytes_retransmit=9 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000274 adj=63998000 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=26.4 raspberry_pi: temp=41.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=7663 bytes_retransmit=0 bytes_invalid=0 send_seq=73 receive_seq=73 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000082 adj=31998843 coil_temp=21.4 refs=0 mcu_temp=22.88 supply_voltage=2.993 sysload=1.88 cputime=8.994 memavail=3298120 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 49.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3574 bytes_read=9126 bytes_retransmit=9 bytes_invalid=0 send_seq=304 receive_seq=304 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015447 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=930 bytes_read=4997 bytes_retransmit=0 bytes_invalid=0 send_seq=129 receive_seq=129 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999844 adj=49998042 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1455 bytes_read=6863 bytes_retransmit=9 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000278 adj=63997750 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=26.6 raspberry_pi: temp=40.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=8019 bytes_retransmit=0 bytes_invalid=0 send_seq=74 receive_seq=74 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000078 adj=31998732 coil_temp=21.4 refs=0 mcu_temp=22.89 supply_voltage=2.993 sysload=1.88 cputime=9.011 memavail=3298124 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 50.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3580 bytes_read=9258 bytes_retransmit=9 bytes_invalid=0 send_seq=305 receive_seq=305 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015420 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=936 bytes_read=5013 bytes_retransmit=0 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999851 adj=49998041 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1461 bytes_read=6966 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000280 adj=63997806 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=26.6 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=8375 bytes_retransmit=0 bytes_invalid=0 send_seq=75 receive_seq=75 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000076 adj=31998751 coil_temp=21.4 refs=0 mcu_temp=22.90 supply_voltage=2.993 sysload=1.73 cputime=9.028 memavail=3298124 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 51.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3586 bytes_read=9361 bytes_retransmit=9 bytes_invalid=0 send_seq=306 receive_seq=306 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015451 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=942 bytes_read=5029 bytes_retransmit=0 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999942 adj=49998070 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1467 bytes_read=7069 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000283 adj=63997844 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=26.8 raspberry_pi: temp=41.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=8731 bytes_retransmit=0 bytes_invalid=0 send_seq=76 receive_seq=76 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000080 adj=31998777 coil_temp=21.4 refs=0 mcu_temp=22.91 supply_voltage=2.993 sysload=1.73 cputime=9.049 memavail=3311988 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 52.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3592 bytes_read=9464 bytes_retransmit=9 bytes_invalid=0 send_seq=307 receive_seq=307 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015398 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=948 bytes_read=5045 bytes_retransmit=0 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999928 adj=49998544 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1473 bytes_read=7201 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000286 adj=63997826 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=26.6 raspberry_pi: temp=40.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=9087 bytes_retransmit=0 bytes_invalid=0 send_seq=77 receive_seq=77 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000088 adj=31998802 coil_temp=21.4 refs=0 mcu_temp=22.93 supply_voltage=2.994 sysload=1.73 cputime=9.066 memavail=3313752 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 53.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3598 bytes_read=9589 bytes_retransmit=9 bytes_invalid=0 send_seq=308 receive_seq=308 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015364 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=954 bytes_read=5061 bytes_retransmit=0 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999915 adj=49998281 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1479 bytes_read=7304 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000296 adj=63997779 Octopus_Pro_H723_V1.1: temp=31.5 EBB42_Gen2_v1.0: temp=26.6 raspberry_pi: temp=40.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=9443 bytes_retransmit=0 bytes_invalid=0 send_seq=78 receive_seq=78 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000099 adj=31998831 coil_temp=21.4 refs=0 mcu_temp=22.93 supply_voltage=2.994 sysload=1.73 cputime=9.083 memavail=3313500 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 54.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3604 bytes_read=9706 bytes_retransmit=9 bytes_invalid=0 send_seq=309 receive_seq=309 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015342 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=960 bytes_read=5090 bytes_retransmit=0 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999913 adj=49998159 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1485 bytes_read=7419 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000297 adj=63997889 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=26.6 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=9799 bytes_retransmit=0 bytes_invalid=0 send_seq=79 receive_seq=79 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000119 adj=31998918 coil_temp=21.4 refs=0 mcu_temp=22.93 supply_voltage=2.994 sysload=1.73 cputime=9.101 memavail=3312996 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 55.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3610 bytes_read=9809 bytes_retransmit=9 bytes_invalid=0 send_seq=310 receive_seq=310 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015340 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=966 bytes_read=5106 bytes_retransmit=0 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999913 adj=49998122 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1491 bytes_read=7542 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000298 adj=63997906 Octopus_Pro_H723_V1.1: temp=31.8 EBB42_Gen2_v1.0: temp=26.8 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=10155 bytes_retransmit=0 bytes_invalid=0 send_seq=80 receive_seq=80 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000118 adj=31999041 coil_temp=21.4 refs=0 mcu_temp=22.95 supply_voltage=2.994 sysload=1.59 cputime=9.120 memavail=3312996 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 56.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3616 bytes_read=9941 bytes_retransmit=9 bytes_invalid=0 send_seq=311 receive_seq=311 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015340 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=972 bytes_read=5122 bytes_retransmit=0 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999910 adj=49998089 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1497 bytes_read=7638 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000302 adj=63997898 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=26.7 raspberry_pi: temp=41.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=10511 bytes_retransmit=0 bytes_invalid=0 send_seq=81 receive_seq=81 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000122 adj=31998997 coil_temp=21.4 refs=0 mcu_temp=22.96 supply_voltage=2.994 sysload=1.59 cputime=9.138 memavail=3312996 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 57.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3622 bytes_read=10044 bytes_retransmit=9 bytes_invalid=0 send_seq=312 receive_seq=312 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015378 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=978 bytes_read=5138 bytes_retransmit=0 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999914 adj=49998045 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1503 bytes_read=7734 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000324 adj=63997908 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=26.7 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=10867 bytes_retransmit=0 bytes_invalid=0 send_seq=82 receive_seq=82 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000122 adj=31998998 coil_temp=21.4 refs=0 mcu_temp=22.98 supply_voltage=2.994 sysload=1.59 cputime=9.156 memavail=3312748 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 58.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3628 bytes_read=10147 bytes_retransmit=9 bytes_invalid=0 send_seq=313 receive_seq=313 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015363 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=984 bytes_read=5154 bytes_retransmit=0 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999910 adj=49998026 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1509 bytes_read=7859 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000326 adj=63997999 Octopus_Pro_H723_V1.1: temp=31.8 EBB42_Gen2_v1.0: temp=26.9 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=11223 bytes_retransmit=0 bytes_invalid=0 send_seq=83 receive_seq=83 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000126 adj=31998950 coil_temp=21.4 refs=0 mcu_temp=23.00 supply_voltage=2.994 sysload=1.59 cputime=9.174 memavail=3312748 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 59.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3634 bytes_read=10293 bytes_retransmit=9 bytes_invalid=0 send_seq=314 receive_seq=314 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015336 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=990 bytes_read=5183 bytes_retransmit=0 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999910 adj=49998005 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1515 bytes_read=7976 bytes_retransmit=9 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000330 adj=63997997 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=26.7 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=504 bytes_read=11579 bytes_retransmit=0 bytes_invalid=0 send_seq=84 receive_seq=84 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000122 adj=31998973 coil_temp=21.4 refs=0 mcu_temp=23.03 supply_voltage=2.994 sysload=1.59 cputime=9.192 memavail=3312748 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 60.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3640 bytes_read=10396 bytes_retransmit=9 bytes_invalid=0 send_seq=315 receive_seq=315 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015350 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=996 bytes_read=5199 bytes_retransmit=0 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999911 adj=49998023 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1521 bytes_read=8079 bytes_retransmit=9 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000332 adj=63998025 Octopus_Pro_H723_V1.1: temp=31.6 EBB42_Gen2_v1.0: temp=26.8 raspberry_pi: temp=40.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=510 bytes_read=11935 bytes_retransmit=0 bytes_invalid=0 send_seq=85 receive_seq=85 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000122 adj=31998941 coil_temp=21.4 refs=0 mcu_temp=23.04 supply_voltage=2.994 sysload=1.46 cputime=9.209 memavail=3312748 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 61.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3646 bytes_read=10499 bytes_retransmit=9 bytes_invalid=0 send_seq=316 receive_seq=316 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015347 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1002 bytes_read=5215 bytes_retransmit=0 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999920 adj=49998017 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1527 bytes_read=8211 bytes_retransmit=9 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000334 adj=63997992 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=26.8 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=516 bytes_read=12291 bytes_retransmit=0 bytes_invalid=0 send_seq=86 receive_seq=86 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000121 adj=31998923 coil_temp=21.4 refs=0 mcu_temp=23.06 supply_voltage=2.994 sysload=1.46 cputime=9.227 memavail=3312748 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 62.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3652 bytes_read=10631 bytes_retransmit=9 bytes_invalid=0 send_seq=317 receive_seq=317 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015351 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1008 bytes_read=5231 bytes_retransmit=0 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999938 adj=49998083 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1533 bytes_read=8314 bytes_retransmit=9 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000333 adj=63997978 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=26.9 raspberry_pi: temp=43.3 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=522 bytes_read=12647 bytes_retransmit=0 bytes_invalid=0 send_seq=87 receive_seq=87 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000128 adj=31998911 coil_temp=21.4 refs=0 mcu_temp=23.08 supply_voltage=2.994 sysload=1.46 cputime=9.307 memavail=3312496 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 63.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3658 bytes_read=10732 bytes_retransmit=9 bytes_invalid=0 send_seq=318 receive_seq=318 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015346 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1014 bytes_read=5247 bytes_retransmit=0 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999943 adj=49998194 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1539 bytes_read=8417 bytes_retransmit=9 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000332 adj=63997943 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=27.0 raspberry_pi: temp=42.8 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=528 bytes_read=13003 bytes_retransmit=0 bytes_invalid=0 send_seq=88 receive_seq=88 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000125 adj=31998957 coil_temp=21.4 refs=0 mcu_temp=23.10 supply_voltage=2.994 sysload=1.46 cputime=9.325 memavail=3313296 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 64.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3664 bytes_read=10846 bytes_retransmit=9 bytes_invalid=0 send_seq=319 receive_seq=319 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015348 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1020 bytes_read=5276 bytes_retransmit=0 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999949 adj=49998199 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1545 bytes_read=8563 bytes_retransmit=9 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000336 adj=63997928 Octopus_Pro_H723_V1.1: temp=31.7 EBB42_Gen2_v1.0: temp=26.7 raspberry_pi: temp=42.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=534 bytes_read=13359 bytes_retransmit=0 bytes_invalid=0 send_seq=89 receive_seq=89 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000122 adj=31998923 coil_temp=21.4 refs=0 mcu_temp=23.11 supply_voltage=2.994 sysload=1.46 cputime=9.344 memavail=3312792 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 65.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3670 bytes_read=10978 bytes_retransmit=9 bytes_invalid=0 send_seq=320 receive_seq=320 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015338 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1026 bytes_read=5292 bytes_retransmit=0 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999953 adj=49998201 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1551 bytes_read=8666 bytes_retransmit=9 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000356 adj=63997938 Octopus_Pro_H723_V1.1: temp=31.8 EBB42_Gen2_v1.0: temp=26.9 raspberry_pi: temp=43.3 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=540 bytes_read=13715 bytes_retransmit=0 bytes_invalid=0 send_seq=90 receive_seq=90 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000121 adj=31998893 coil_temp=21.4 refs=0 mcu_temp=23.13 supply_voltage=2.994 sysload=1.35 cputime=9.361 memavail=3312792 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 66.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3676 bytes_read=11081 bytes_retransmit=9 bytes_invalid=0 send_seq=321 receive_seq=321 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015343 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1032 bytes_read=5308 bytes_retransmit=0 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999949 adj=49998199 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1557 bytes_read=8769 bytes_retransmit=9 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000356 adj=63998103 Octopus_Pro_H723_V1.1: temp=31.8 EBB42_Gen2_v1.0: temp=26.7 raspberry_pi: temp=42.8 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=546 bytes_read=14071 bytes_retransmit=0 bytes_invalid=0 send_seq=91 receive_seq=91 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000119 adj=31998886 coil_temp=21.4 refs=0 mcu_temp=23.14 supply_voltage=2.994 sysload=1.35 cputime=9.379 memavail=3312792 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 67.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3682 bytes_read=11184 bytes_retransmit=9 bytes_invalid=0 send_seq=322 receive_seq=322 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015342 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1038 bytes_read=5324 bytes_retransmit=0 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999948 adj=49998122 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1563 bytes_read=8901 bytes_retransmit=9 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63998045 Octopus_Pro_H723_V1.1: temp=31.9 EBB42_Gen2_v1.0: temp=26.9 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=552 bytes_read=14427 bytes_retransmit=0 bytes_invalid=0 send_seq=92 receive_seq=92 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000119 adj=31998874 coil_temp=21.4 refs=0 mcu_temp=23.15 supply_voltage=2.994 sysload=1.35 cputime=9.396 memavail=3312792 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 68.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3688 bytes_read=11316 bytes_retransmit=9 bytes_invalid=0 send_seq=323 receive_seq=323 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015347 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=1044 bytes_read=5340 bytes_retransmit=0 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999946 adj=49998088 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1569 bytes_read=9004 bytes_retransmit=9 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000353 adj=63997993 Octopus_Pro_H723_V1.1: temp=31.9 EBB42_Gen2_v1.0: temp=27.0 raspberry_pi: temp=42.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=558 bytes_read=14783 bytes_retransmit=0 bytes_invalid=0 send_seq=93 receive_seq=93 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000118 adj=31998879 coil_temp=21.4 refs=0 mcu_temp=23.16 supply_voltage=2.994 sysload=1.35 cputime=9.414 memavail=3312792 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 69.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3694 bytes_read=11433 bytes_retransmit=9 bytes_invalid=0 send_seq=324 receive_seq=324 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015381 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1050 bytes_read=5369 bytes_retransmit=0 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999949 adj=49998052 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1575 bytes_read=9121 bytes_retransmit=9 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000352 adj=63997957 Octopus_Pro_H723_V1.1: temp=31.9 EBB42_Gen2_v1.0: temp=26.8 raspberry_pi: temp=41.9 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=564 bytes_read=15139 bytes_retransmit=0 bytes_invalid=0 send_seq=94 receive_seq=94 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000116 adj=31998865 coil_temp=21.4 refs=0 mcu_temp=23.17 supply_voltage=2.994 sysload=1.35 cputime=9.432 memavail=3312296 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 70.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3700 bytes_read=11536 bytes_retransmit=9 bytes_invalid=0 send_seq=325 receive_seq=325 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015376 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1056 bytes_read=5385 bytes_retransmit=0 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999948 adj=49998037 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1581 bytes_read=9253 bytes_retransmit=9 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000353 adj=63997885 Octopus_Pro_H723_V1.1: temp=31.9 EBB42_Gen2_v1.0: temp=27.0 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=570 bytes_read=15495 bytes_retransmit=0 bytes_invalid=0 send_seq=95 receive_seq=95 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000115 adj=31998833 coil_temp=21.4 refs=0 mcu_temp=23.18 supply_voltage=2.994 sysload=1.24 cputime=9.450 memavail=3312296 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 71.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3706 bytes_read=11668 bytes_retransmit=9 bytes_invalid=0 send_seq=326 receive_seq=326 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015402 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1062 bytes_read=5401 bytes_retransmit=0 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999958 adj=49998028 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1587 bytes_read=9356 bytes_retransmit=9 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000351 adj=63997903 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.2 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=576 bytes_read=15851 bytes_retransmit=0 bytes_invalid=0 send_seq=96 receive_seq=96 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000117 adj=31998844 coil_temp=21.4 refs=0 mcu_temp=23.20 supply_voltage=2.994 sysload=1.24 cputime=9.467 memavail=3312296 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 72.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3712 bytes_read=11771 bytes_retransmit=9 bytes_invalid=0 send_seq=327 receive_seq=327 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015399 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1068 bytes_read=5417 bytes_retransmit=0 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000006 adj=49998096 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1593 bytes_read=9459 bytes_retransmit=9 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000353 adj=63997846 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.1 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=582 bytes_read=16207 bytes_retransmit=0 bytes_invalid=0 send_seq=97 receive_seq=97 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000117 adj=31998848 coil_temp=21.4 refs=0 mcu_temp=23.22 supply_voltage=2.994 sysload=1.24 cputime=9.484 memavail=3313056 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 73.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3718 bytes_read=11874 bytes_retransmit=9 bytes_invalid=0 send_seq=328 receive_seq=328 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015405 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1074 bytes_read=5433 bytes_retransmit=0 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000088 adj=49998557 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1599 bytes_read=9591 bytes_retransmit=9 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000354 adj=63997878 Octopus_Pro_H723_V1.1: temp=31.9 EBB42_Gen2_v1.0: temp=27.0 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=588 bytes_read=16563 bytes_retransmit=0 bytes_invalid=0 send_seq=98 receive_seq=98 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000118 adj=31998863 coil_temp=21.4 refs=0 mcu_temp=23.22 supply_voltage=2.994 sysload=1.24 cputime=9.502 memavail=3312048 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 74.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3724 bytes_read=12016 bytes_retransmit=9 bytes_invalid=0 send_seq=329 receive_seq=329 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015402 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1080 bytes_read=5462 bytes_retransmit=0 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000196 adj=49999201 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1605 bytes_read=9708 bytes_retransmit=9 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997881 Octopus_Pro_H723_V1.1: temp=31.8 EBB42_Gen2_v1.0: temp=27.2 raspberry_pi: temp=42.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=594 bytes_read=16919 bytes_retransmit=0 bytes_invalid=0 send_seq=99 receive_seq=99 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000118 adj=31998875 coil_temp=21.4 refs=0 mcu_temp=23.23 supply_voltage=2.994 sysload=1.24 cputime=9.520 memavail=3314912 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 75.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3730 bytes_read=12118 bytes_retransmit=9 bytes_invalid=0 send_seq=330 receive_seq=330 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015407 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1086 bytes_read=5478 bytes_retransmit=0 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000322 adj=49999985 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1611 bytes_read=9811 bytes_retransmit=9 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997988 Octopus_Pro_H723_V1.1: temp=31.9 EBB42_Gen2_v1.0: temp=27.2 raspberry_pi: temp=42.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=600 bytes_read=17275 bytes_retransmit=0 bytes_invalid=0 send_seq=100 receive_seq=100 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000119 adj=31998902 coil_temp=21.4 refs=0 mcu_temp=23.24 supply_voltage=2.994 sysload=1.14 cputime=9.537 memavail=3314912 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 76.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3736 bytes_read=12221 bytes_retransmit=9 bytes_invalid=0 send_seq=331 receive_seq=331 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015404 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1092 bytes_read=5494 bytes_retransmit=0 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000459 adj=50000767 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1617 bytes_read=9943 bytes_retransmit=9 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000362 adj=63997940 Octopus_Pro_H723_V1.1: temp=32.1 EBB42_Gen2_v1.0: temp=27.1 raspberry_pi: temp=42.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=606 bytes_read=17631 bytes_retransmit=0 bytes_invalid=0 send_seq=101 receive_seq=101 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000118 adj=31998904 coil_temp=21.4 refs=0 mcu_temp=23.26 supply_voltage=2.994 sysload=1.14 cputime=9.556 memavail=3314660 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.7 pwm=0.000
Stats 77.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3742 bytes_read=12353 bytes_retransmit=9 bytes_invalid=0 send_seq=332 receive_seq=332 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015417 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1098 bytes_read=5510 bytes_retransmit=0 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000604 adj=50001527 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1623 bytes_read=10046 bytes_retransmit=9 bytes_invalid=0 send_seq=184 receive_seq=184 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000360 adj=63997922 Octopus_Pro_H723_V1.1: temp=31.9 EBB42_Gen2_v1.0: temp=27.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=612 bytes_read=17987 bytes_retransmit=0 bytes_invalid=0 send_seq=102 receive_seq=102 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000118 adj=31998901 coil_temp=21.4 refs=0 mcu_temp=23.27 supply_voltage=2.994 sysload=1.14 cputime=9.574 memavail=3314660 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 78.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3748 bytes_read=12456 bytes_retransmit=9 bytes_invalid=0 send_seq=333 receive_seq=333 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015433 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1104 bytes_read=5526 bytes_retransmit=0 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000760 adj=50002204 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1629 bytes_read=10149 bytes_retransmit=9 bytes_invalid=0 send_seq=185 receive_seq=185 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000359 adj=63997882 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.3 raspberry_pi: temp=42.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=618 bytes_read=18343 bytes_retransmit=0 bytes_invalid=0 send_seq=103 receive_seq=103 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000120 adj=31998883 coil_temp=21.4 refs=0 mcu_temp=23.28 supply_voltage=2.994 sysload=1.14 cputime=9.591 memavail=3314660 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 79.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3754 bytes_read=12573 bytes_retransmit=9 bytes_invalid=0 send_seq=334 receive_seq=334 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015501 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1110 bytes_read=5555 bytes_retransmit=0 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50000922 adj=50002870 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1635 bytes_read=10295 bytes_retransmit=9 bytes_invalid=0 send_seq=186 receive_seq=186 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000374 adj=63997845 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.3 raspberry_pi: temp=43.3 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=624 bytes_read=18699 bytes_retransmit=0 bytes_invalid=0 send_seq=104 receive_seq=104 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000121 adj=31998892 coil_temp=21.4 refs=0 mcu_temp=23.30 supply_voltage=2.994 sysload=1.14 cputime=9.609 memavail=3314660 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 80.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3760 bytes_read=12705 bytes_retransmit=9 bytes_invalid=0 send_seq=335 receive_seq=335 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015498 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1116 bytes_read=5571 bytes_retransmit=0 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50001079 adj=50003419 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1641 bytes_read=10398 bytes_retransmit=9 bytes_invalid=0 send_seq=187 receive_seq=187 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000375 adj=63997892 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.2 raspberry_pi: temp=43.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=630 bytes_read=19039 bytes_retransmit=0 bytes_invalid=0 send_seq=105 receive_seq=105 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000121 adj=31998839 coil_temp=21.4 refs=0 mcu_temp=23.30 supply_voltage=2.994 sysload=1.05 cputime=9.625 memavail=3314660 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 81.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3766 bytes_read=12808 bytes_retransmit=9 bytes_invalid=0 send_seq=336 receive_seq=336 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015514 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1122 bytes_read=5587 bytes_retransmit=0 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50001235 adj=50003938 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1647 bytes_read=10501 bytes_retransmit=9 bytes_invalid=0 send_seq=188 receive_seq=188 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000372 adj=63997908 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=636 bytes_read=19395 bytes_retransmit=0 bytes_invalid=0 send_seq=106 receive_seq=106 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000122 adj=31998858 coil_temp=21.4 refs=0 mcu_temp=23.32 supply_voltage=2.994 sysload=1.05 cputime=9.642 memavail=3314660 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 82.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3772 bytes_read=12911 bytes_retransmit=9 bytes_invalid=0 send_seq=337 receive_seq=337 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015506 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1128 bytes_read=5603 bytes_retransmit=0 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50001388 adj=50004344 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1653 bytes_read=10633 bytes_retransmit=9 bytes_invalid=0 send_seq=189 receive_seq=189 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000373 adj=63997850 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.3 raspberry_pi: temp=43.3 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=642 bytes_read=19751 bytes_retransmit=0 bytes_invalid=0 send_seq=107 receive_seq=107 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000121 adj=31998854 coil_temp=21.4 refs=0 mcu_temp=23.33 supply_voltage=2.994 sysload=1.05 cputime=9.660 memavail=3314660 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.2 pwm=0.000
Stats 83.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3778 bytes_read=13043 bytes_retransmit=9 bytes_invalid=0 send_seq=338 receive_seq=338 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015498 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1134 bytes_read=5619 bytes_retransmit=0 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50001533 adj=50004708 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1659 bytes_read=10736 bytes_retransmit=9 bytes_invalid=0 send_seq=190 receive_seq=190 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000370 adj=63997884 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.2 raspberry_pi: temp=43.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=648 bytes_read=20107 bytes_retransmit=0 bytes_invalid=0 send_seq=108 receive_seq=108 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000121 adj=31998865 coil_temp=21.4 refs=0 mcu_temp=23.34 supply_voltage=2.994 sysload=1.05 cputime=9.677 memavail=3313904 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 84.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3784 bytes_read=13146 bytes_retransmit=9 bytes_invalid=0 send_seq=339 receive_seq=339 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015548 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1140 bytes_read=5648 bytes_retransmit=0 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50001675 adj=50004948 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1665 bytes_read=10853 bytes_retransmit=9 bytes_invalid=0 send_seq=191 receive_seq=191 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000369 adj=63997872 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.3 raspberry_pi: temp=42.4 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=654 bytes_read=20463 bytes_retransmit=0 bytes_invalid=0 send_seq=109 receive_seq=109 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000121 adj=31998875 coil_temp=21.4 refs=0 mcu_temp=23.34 supply_voltage=2.994 sysload=1.05 cputime=9.695 memavail=3313904 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 85.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3790 bytes_read=13259 bytes_retransmit=9 bytes_invalid=0 send_seq=340 receive_seq=340 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015538 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1146 bytes_read=5664 bytes_retransmit=0 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50001812 adj=50005076 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1671 bytes_read=10985 bytes_retransmit=9 bytes_invalid=0 send_seq=192 receive_seq=192 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000367 adj=63997772 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.3 raspberry_pi: temp=42.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=660 bytes_read=20819 bytes_retransmit=0 bytes_invalid=0 send_seq=110 receive_seq=110 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000122 adj=31998834 coil_temp=21.4 refs=0 mcu_temp=23.34 supply_voltage=2.994 sysload=0.96 cputime=9.713 memavail=3313904 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 86.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3796 bytes_read=13391 bytes_retransmit=9 bytes_invalid=0 send_seq=341 receive_seq=341 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015529 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1152 bytes_read=5680 bytes_retransmit=0 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50001947 adj=50005241 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1677 bytes_read=11088 bytes_retransmit=9 bytes_invalid=0 send_seq=193 receive_seq=193 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000366 adj=63997796 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=666 bytes_read=21175 bytes_retransmit=0 bytes_invalid=0 send_seq=111 receive_seq=111 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000122 adj=31998864 coil_temp=21.4 refs=0 mcu_temp=23.34 supply_voltage=2.994 sysload=0.96 cputime=9.731 memavail=3313904 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 87.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3802 bytes_read=13494 bytes_retransmit=9 bytes_invalid=0 send_seq=342 receive_seq=342 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015527 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1158 bytes_read=5696 bytes_retransmit=0 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50002068 adj=50005403 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1683 bytes_read=11191 bytes_retransmit=9 bytes_invalid=0 send_seq=194 receive_seq=194 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997827 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.4 raspberry_pi: temp=43.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=672 bytes_read=21531 bytes_retransmit=0 bytes_invalid=0 send_seq=112 receive_seq=112 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000122 adj=31998879 coil_temp=21.5 refs=0 mcu_temp=23.34 supply_voltage=2.994 sysload=0.96 cputime=9.748 memavail=3313904 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.8 pwm=0.000
Stats 88.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3808 bytes_read=13597 bytes_retransmit=9 bytes_invalid=0 send_seq=343 receive_seq=343 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015517 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1164 bytes_read=5712 bytes_retransmit=0 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50002185 adj=50005399 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1689 bytes_read=11323 bytes_retransmit=9 bytes_invalid=0 send_seq=195 receive_seq=195 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997881 Octopus_Pro_H723_V1.1: temp=32.1 EBB42_Gen2_v1.0: temp=27.4 raspberry_pi: temp=44.3 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=678 bytes_read=21887 bytes_retransmit=0 bytes_invalid=0 send_seq=113 receive_seq=113 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000126 adj=31998877 coil_temp=21.5 refs=0 mcu_temp=23.36 supply_voltage=2.994 sysload=0.96 cputime=9.767 memavail=3313904 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
Stats 89.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3814 bytes_read=13729 bytes_retransmit=9 bytes_invalid=0 send_seq=344 receive_seq=344 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015535 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1170 bytes_read=5741 bytes_retransmit=0 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50002297 adj=50005404 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1695 bytes_read=11440 bytes_retransmit=9 bytes_invalid=0 send_seq=196 receive_seq=196 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000366 adj=63997897 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.4 raspberry_pi: temp=44.8 heater_bed: target=0 temp=20.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=684 bytes_read=22243 bytes_retransmit=0 bytes_invalid=0 send_seq=114 receive_seq=114 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000126 adj=31998929 coil_temp=21.5 refs=0 mcu_temp=23.37 supply_voltage=2.994 sysload=0.96 cputime=9.785 memavail=3313904 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 90.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3820 bytes_read=13846 bytes_retransmit=9 bytes_invalid=0 send_seq=345 receive_seq=345 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015525 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1176 bytes_read=5757 bytes_retransmit=0 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50002399 adj=50005355 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1701 bytes_read=11543 bytes_retransmit=9 bytes_invalid=0 send_seq=197 receive_seq=197 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997883 Octopus_Pro_H723_V1.1: temp=32.0 EBB42_Gen2_v1.0: temp=27.4 raspberry_pi: temp=44.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=690 bytes_read=22599 bytes_retransmit=0 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000128 adj=31998906 coil_temp=21.5 refs=0 mcu_temp=23.38 supply_voltage=2.994 sysload=0.89 cputime=9.803 memavail=3313904 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.1 pwm=0.000
Stats 91.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3826 bytes_read=13949 bytes_retransmit=9 bytes_invalid=0 send_seq=346 receive_seq=346 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015524 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1182 bytes_read=5773 bytes_retransmit=0 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50002500 adj=50005280 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1707 bytes_read=11675 bytes_retransmit=9 bytes_invalid=0 send_seq=198 receive_seq=198 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000365 adj=63997885 Octopus_Pro_H723_V1.1: temp=32.1 EBB42_Gen2_v1.0: temp=27.4 raspberry_pi: temp=43.8 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=696 bytes_read=22955 bytes_retransmit=0 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000128 adj=31998930 coil_temp=21.5 refs=0 mcu_temp=23.39 supply_voltage=2.994 sysload=0.89 cputime=9.821 memavail=3313928 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=4.0 pwm=0.000
Stats 92.8: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000001 mcu_task_stddev=0.000001 bytes_write=3832 bytes_read=14081 bytes_retransmit=9 bytes_invalid=0 send_seq=347 receive_seq=347 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=400015516 rpi: mcu_awake=0.001 mcu_task_avg=0.000009 mcu_task_stddev=0.000009 bytes_write=1188 bytes_read=5789 bytes_retransmit=0 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=50002585 adj=50005241 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1713 bytes_read=11778 bytes_retransmit=9 bytes_invalid=0 send_seq=199 receive_seq=199 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=64000363 adj=63997879 Octopus_Pro_H723_V1.1: temp=32.1 EBB42_Gen2_v1.0: temp=27.4 raspberry_pi: temp=43.3 heater_bed: target=0 temp=20.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=702 bytes_read=23311 bytes_retransmit=0 bytes_invalid=0 send_seq=117 receive_seq=117 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000141 adj=31998915 coil_temp=21.5 refs=0 mcu_temp=23.41 supply_voltage=2.994 sysload=0.89 cputime=9.839 memavail=3314668 print_time=44.259 buffer_time=0.000 print_stall=0 extruder: target=0 temp=3.9 pwm=0.000
ratos: beacon probing regions updated: BeaconProbingRegions(x_offset=0.0, y_offset=22.5, printable_x_max=330.0, printable_y_max=350.0, mesh_proximity_min_coil_pos=(20.0, 30.0), mesh_proximity_max_coil_pos=(310.0, 310.0), mesh_proximity_min_toolhead_pos=(20.0, 7.5), mesh_proximity_max_toolhead_pos=(310.0, 287.5), mesh_contact_min=(20.0, 30.0), mesh_contact_max=(310.0, 287.5), logical_proximity_min_coil_pos=(20.0, 20.0), logical_proximity_max_coil_pos=(310.0, 330.0), logical_proximity_min_toolhead_pos=(20.0, -2.5), logical_proximity_max_toolhead_pos=(310.0, 307.5), logical_contact_min=(10.0, -12.5), logical_contact_max=(320.0, 317.5))